Не предавайте датите като низове към вашата MySQL база данни. По-добре е, както по-лесно, така и по-безопасно да предавате обекти за дата. От една страна, това ви освобождава от форматиране и всякакви проблеми с форматирането. Най-добре предайте екземпляри на клас от java.time
, модерният API за дата и час на Java. Във вашия случай LocalDateTime
ще свърши работа.
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
получено е:
Опростих малко вашето преобразуване от епохален низ. Използвайте примитивен long
с малки букви вместо Long
обект. Използвам вашата часова зона, Азия/Калкута, предполагайки, че стойностите на вашата база данни са в тази часова зона. Нормалните препоръки са да се поддържат стойностите на базата данни в UTC, поне ако има някаква възможност данните някога да бъдат използвани извън вашата часова зона. Ако искате това, използвайте това преобразуване вместо горното:
LocalDateTime ldt = inst.atOffset(ZoneOffset.UTC).toLocalDateTime();
Връзка: Урок за Oracle:Дата и час
обяснява как да използвате java.time
.