Différents formats de sortie de SimpleDateFormatter.parse
Dans un programme Java, la classe SimpleDateFormat est utilisée pour convertir les dates dans des formats spécifiés. Cependant, il a été observé que dans certains cas, l'analyse d'une date à l'aide de SimpleDateFormatter.parse peut aboutir à un format différent de celui spécifié lors du formatage.
Ce problème survient lors de la conversion d'horodatages UNIX en chaînes de date. Voici un exemple simplifié :
<code class="java">String ep ="a1527069600"; Long epoch = Long.parseLong(ep.substring(1, ep.length())); Date dt = new Date(epoch*1000L); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a"); sdf.setTimeZone(TimeZone.getTimeZone("Asia/Calcutta")); System.out.println("SDF.Format - "+sdf.format(dt)); System.out.println("SDF.parse - "+sdf.parse(sdf.format(dt)));</code>
Dans cet exemple, alors que le format spécifié pour sdf est "jj/MM/aaaa hh:mm:ss a", la sortie de sdf.parse est dans un format différent , "Mercredi 23 mai 15:30:00 IST 2018."
Solution
Pour résoudre ce problème, évitez de transmettre des chaînes de date à une base de données MySQL. Utilisez plutôt des objets date. Java fournit l'API java.time pour une gestion moderne de la date et de l'heure. Pour votre scénario spécifique, vous pouvez utiliser un objet LocalDateTime :
<code class="java"> String ep ="a1527069600"; long epoch = Long.parseLong(ep.substring(1)); Instant inst = Instant.ofEpochSecond(epoch); LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime(); PreparedStatement ps = myDatabaseConnection.prepareStatement( "insert into my_table (my_date_time) values (?)"); ps.setObject(1, ldt);</code>
Cette approche garantit un formatage de date cohérent et élimine le problème d'analyse rencontré avec SimpleDateFormatter.parse.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!