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
.