Nepředávejte data jako řetězce do databáze MySQL. Je lepší, jednodušší a bezpečnější předávání datových objektů. Jednak vás to zbaví formátování a jakýchkoli problémů s formátováním. Nejlepší je předat instance třídy z java.time
, moderní Java API pro datum a čas. Ve vašem případě LocalDateTime
udělá.
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
získané je:
Trochu jsem zjednodušil váš převod z epochového řetězce. Použijte primitivní long
s malými písmeny spíše než Long
objekt. Používám vaše časové pásmo, Asie/Kalkata, za předpokladu, že hodnoty vaší databáze jsou v tomto časovém pásmu. Normální doporučení jsou udržovat hodnoty databáze v UTC, alespoň pokud existuje nějaká možnost, že data budou někdy použita mimo vaše časové pásmo. Pokud to chcete, použijte tento převod namísto výše uvedeného:
LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();
Odkaz: Výukový program pro Oracle:Datum a čas
vysvětlující, jak používat java.time
.