sql >> Databasteknik >  >> RDS >> Mysql

SimpleDateFormatter.parse ger utdata i ett annat format än vad som anges

Skicka inte datum som strängar till din MySQL-databas. Det är bättre, både enklare och säkrare att skicka datumobjekt. För det första, det befriar dig från formatering och eventuella formateringsproblem. Bäst, skicka instanser av en klass från java.time , det moderna Java-API:et för datum och tid. I ditt fall en LocalDateTime kommer att göra.

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

LocalDateTime erhållen är:

Jag förenklade din konvertering från epoksträng lite. Använd en primitiv, gemen long snarare än en Long objekt. Jag använder din tidszon, Asien/Calcutta, förutsatt att dina databasvärden är i denna tidszon. Normala rekommendationer är att hålla databasvärden i UTC, åtminstone om det finns någon möjlighet att data någonsin kommer att användas utanför din tidszon. Om du vill ha detta, använd denna konvertering istället för den ovan:

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

Länk: Oracle handledning:Datum Tid förklara hur man använder java.time .




  1. Problem med fönsterfunktion i SQL Server 2008 R2

  2. Operatören finns inte:json =json

  3. Kolumn beräknad från en annan kolumn?

  4. FIX:MySQL – VÄLJ kommando nekad till användare