Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SimpleDateFormatter.parse gibt Ausgabe in einem anderen Format als angegeben aus

Übergeben Sie Datumsangaben nicht als Zeichenfolgen an Ihre MySQL-Datenbank. Es ist besser, sowohl einfacher als auch sicherer, Datumsobjekte zu übergeben. Zum einen entlastet es Sie von der Formatierung und allen Formatierungsproblemen. Übergeben Sie am besten Instanzen einer Klasse von java.time , die moderne Java-API für Datum und Uhrzeit. In Ihrem Fall eine LocalDateTime reicht.

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

Die LocalDateTime erhalten ist:

Ich habe Ihre Konvertierung von der Epochenzeichenfolge etwas vereinfacht. Verwenden Sie einen primitiven, kleingeschriebenen long statt eines Long Objekt. Ich verwende Ihre Zeitzone, Asien/Kalkutta, und gehe davon aus, dass Ihre Datenbankwerte in dieser Zeitzone liegen. Normale Empfehlungen sind, Datenbankwerte in UTC zu halten, zumindest wenn die Möglichkeit besteht, dass die Daten jemals außerhalb Ihrer Zeitzone verwendet werden. Wenn Sie dies wünschen, verwenden Sie diese Konvertierung anstelle der obigen:

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

Link: Oracle-Tutorial:Date Time erklärt, wie man java.time verwendet .