почему java. sql .Timestamp возвращает отрицательное значение, если дата после 1970-01-01 - PullRequest
0 голосов
/ 21 апреля 2020
Timestamp timestamp = Timestamp.valueOf("1970-01-01 01:00:00");
System.out.println(timestamp.getTime());

Есть идеи, что этот код возвращает -25200000? Я думал, что время после 1970-01-01 00:00:00 будет положительным.

1 Ответ

1 голос
/ 21 апреля 2020

Вы используете ужасный класс даты-времени, который был заменен годами на go современными java .time классами, определенными в JSR 310. Никогда не используйте java.sql.Timestamp.

Проанализируйте ваш ввод как LocalDateTime, поскольку в нем отсутствует индикатор часового пояса или смещения от UT C. Замените SPACE в середине на T, чтобы соответствовать стандарту ISO 8601 для форматов даты и времени.

String input = "1970-01-01 01:00:00".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input ) ;

Очевидно, вы хотите, чтобы это представляло момент в UT C. Примените смещение, чтобы получить OffsetDateTime.

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;

Получить счет в миллисекундах с начала отсчета эпохи первого момента 1970 года в UT C.

long millis = odt.toInstant().toEpochMilli() ;

3600000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...