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

SimpleDateFormatter.parse donnant une sortie dans un format différent de celui spécifié

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 .