Maison  >  Article  >  base de données  >  Pourquoi SimpleDateFormat.parse produit-il une sortie inattendue lors de la conversion d'horodatages UNIX ?

Pourquoi SimpleDateFormat.parse produit-il une sortie inattendue lors de la conversion d'horodatages UNIX ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-27 16:26:29708parcourir

Why Does SimpleDateFormat.parse Produce Unexpected Output When Converting UNIX Timestamps?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn