sql >> Database >  >> RDS >> Mysql

SimpleDateFormatter.parse geeft uitvoer in een ander formaat dan gespecificeerd

Geef datums niet als tekenreeksen door aan uw MySQL-database. Het is beter, zowel gemakkelijker als veiliger om datumobjecten door te geven. Om te beginnen verlost het u van opmaak en eventuele opmaakproblemen. Beste, geef instanties door van een klasse uit java.time , de moderne Java-API voor datum en tijd. In jouw geval een LocalDateTime zal doen.

    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);

De LocalDateTime verkregen is:

Ik heb je conversie van epoch string een beetje vereenvoudigd. Gebruik een primitieve, kleine long in plaats van een Long object. Ik gebruik uw tijdzone, Azië/Calcutta, ervan uitgaande dat uw databasewaarden zich in deze tijdzone bevinden. Normale aanbevelingen zijn om databasewaarden in UTC te houden, tenminste als de mogelijkheid bestaat dat de gegevens ooit buiten uw tijdzone worden gebruikt. Als je dit wilt, gebruik dan deze conversie in plaats van de bovenstaande:

    LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();

Link: Oracle-tutorial:Datum Tijd uitleg over het gebruik van java.time .




  1. IN-operator SQL

  2. PDO IN() Array-instructie EN een tijdelijke aanduiding

  3. Hoe een GUID genereren in Oracle?

  4. 19 online bronnen voor informatie over databaseontwerpfouten