Mysql
 sql >> Base de données >  >> RDS >> Mysql

EEE MMM jj HH:mm:ss ZZZ aaaa format de date vers java.sql.Date

    LocalDate date4 = ZonedDateTime
            .parse(date, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH))
            .toLocalDate();
    java.sql.Date date5 = java.sql.Date.valueOf(date4);

J'utilise les classes modernes dans le java.time emballer. Vous remarquez que le code n'est pas seulement plus simple, une fois que vous vous êtes familiarisé avec le style d'écriture fluide des nouvelles classes, il est également plus clair.

Si vous vouliez être 100 % moderne, vous devriez également vérifier si votre dernier pilote MySQL JDBC n'accepterait pas une LocalDate directement sans conversion en java.sql.Date . Ça devrait.

Quelques détails à noter

  • Si vous avez besoin que votre code s'exécute sur des ordinateurs hors de votre contrôle, donnez toujours des paramètres régionaux à votre formateur, sinon votre chaîne de date ne pourra pas être analysée sur un ordinateur dont les paramètres régionaux ne sont pas anglophones. Vous pouvez utiliser Locale.ROOT pour une locale neutre (il parle anglais).
  • Si vous le pouvez, évitez les abréviations de fuseau horaire à trois lettres. Beaucoup sont ambigus. EET n'est vraiment qu'un demi-fuseau horaire puisque certains endroits où il est utilisé sont maintenant sur EEST (heure d'été). Mieux vaut utiliser soit un ID de fuseau horaire long comme Europe/Bucharest ou un décalage par rapport à UTC comme +02:00 .

Ces points sont valides peu importe si vous utilisez DateTimeFormatter ou SimpleDateFormat .

Si vous ne pouvez pas ou ne voulez pas passer aux nouvelles classes recommandées, le correctif de votre code est :

    SimpleDateFormat formatnow 
            = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH); 
    SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");

J'utilise zzz en minuscules puisque cela est documenté pour correspondre à un nom de fuseau horaire à trois lettres, je sais que les majuscules ZZZ fonctionne aussi. J'ai ajouté des paramètres régionaux. Et peut-être le plus important, dans le format nécessaire, j'ai changé YYYY (année basée sur la semaine) à yyyy (année civile) et DD (jour de l'année) à dd (jour du mois). Toutes ces lettres sont dans la documentation .