2016-10-10 7 views
2

В классе LocalDateTime существует способ конвертировать эпоху второй и nano-second в UTC.Как изменить эпоху по умолчанию от 1970-01-01T00: 00: 00Z для LocalDateTime

Это выглядит следующим образом:

LocalDateTime dateTime = LocalDateTime.ofEpochSecond() 

Однако, он получает экземпляр LocalDateTime с использованием секунд от эпохи 1970-01-01T00: 00: 00Z.

Есть ли способ изменить 1970-1980 годы как экземпляр по умолчанию?

Я считаю, что это нужно, чтобы быть изменен, так как:

epoch seconds = 667662644 
epoch nanoseconds = 1165598 

должен выйти на:

13:50:44.001165598 03/03/2001 

, но я получаю:

13:50:44.001165598 2/27/1991 
+3

Короткий ответ: Нет! --- Длинный ответ: если ваша эпоха не совпадает с эпохой Java, тогда вам решать применить разницу, например. количество секунд между 1/1/1970 и 1/1/1980, которое равно 315532800. – Andreas

+0

@ Andreas ok, что имеет смысл. Я выясню смещение, а затем воспользуюсь LocalTimeClass. Цените наконечник. –

+0

Обратите внимание, что 667662644 с эпохой 1/1/1980 - 2/26/2001, а не 3/3/2001. Казалось бы, данная стоимость не относится даже к григорианскому календарю с високосными годами. – Andreas

ответ

1

Выяснить вас смещение необходимо и добавить его ко всем значениям секунд эпохи, прежде чем перейти к «LocalDateTime».

Смещение может быть вычислен один раз, а затем жестко закодированы как

public static final int EPOCH_OFFSET = nnnn; 

Пример:

Instant GPS = Instant.parse("1980-01-06T00:00:00Z"); 
    long GPS_EPOCH = GPS.toEpochMilli(); 
    System.out.printf("%s %,d\n",GPS.toString(), GPS_EPOCH); 

Выход:

1980-01-06T00:00:00Z 315,964,800,000 
+0

Ок. спасибо за Ваш ответ. Чтобы быть ясным, мне нужно найти количество секунд эпохи с 1970-01-01 по 1980-06-01, и это будет EPOCH_OFFSET, а затем просто вычтите это из общей секунды секунды? –

+1

@ JaredSmith 1 июня 1980 года? В самом деле? – Andreas

+1

Вы можете получить смещение, создав «LocalDateTime» той эпохи, которую вы хотите, и конвертируете в секунды эпохи Java. Затем _add_ это значение для ваших значений времени, которые основаны на вашей эпохе, чтобы преобразовать их в эпоху Java. Я замалчивал операцию в исходном ответе, я исправляю ее. –