Ne transmettez pas les dates sous forme de chaînes à votre base de données MySQL. C'est mieux, à la fois plus facile et plus sûr de transmettre des objets de date. D'une part, cela vous soulage du formatage et de tout problème de formatage. Au mieux, passez les instances d'une classe à partir de java.time
, l'API de date et d'heure Java moderne. Dans votre cas, un LocalDateTime
fera l'affaire.
String ep ="a1527069600";
long epoch = Long.parseLong(ep.substring(1));
Instant inst = Instant.ofEpochSecond(epoch);
LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();
System.out.println(ldt);
PreparedStatement ps = myDatabaseConnection.prepareStatement(
"insert into my_table (my_date_time) values (?)");
ps.setObject(1, ldt);
Le LocalDateTime
obtenu est :
J'ai un peu simplifié votre conversion à partir de la chaîne d'époque. Utilisez un long
primitif en minuscules plutôt qu'un Long
objet. J'utilise votre fuseau horaire, Asie/Calcutta, en supposant que les valeurs de votre base de données se trouvent dans ce fuseau horaire. Les recommandations normales sont de conserver les valeurs de la base de données en UTC, au moins s'il existe une possibilité que les données soient utilisées en dehors de votre fuseau horaire. Si vous le souhaitez, utilisez cette conversion au lieu de celle ci-dessus :
LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();
Lien : Tutoriel Oracle :Date et heure
expliquant comment utiliser java.time
.