Как преобразовать LocalDateTime в com.google.protobuf.Timestamp? - PullRequest
0 голосов
/ 07 июня 2018

У меня есть экземпляр LocalDateTime, который я получаю из уровня хранилища, и мне нужно преобразовать его в экземпляр Timestamp (Protocol Buffer).

Я использовал следующий подход для преобразования:

LocalDateTime localDateTime = LocalDateTime.now();//this can be any date

Instant instant = localDateTime.toInstant(ZoneOffset.UTC);

Timestamp timestamp = Timestamp.newBuilder()
                            .setSeconds(instant.getEpochSecond())
                            .setNanos(instant.getNano())
                            .build();

Используется ли здесь ZoneOffset для преобразования localDateTime в экземпляр Instant, правильно?

Я использовал смещение UTC, потому что комментарий к атрибуту "seconds" в классе Timestampговорит следующее:

Представляет секунды времени UTC, начиная с эпохи Unix 1970-01-01T00: 00: 00Z.Должно быть от 0001-01-01T00: 00: 00Z до 9999-12-31T23: 59: 59Z включительно

Использовал ли я правильный ZoneOffset и правильный ли мой подход к конвертации?

1 Ответ

0 голосов
/ 07 июня 2018

В общем, нет, ваш подход не верен.Причина в том, что LocalDateTime не имеет ассоциированного часового пояса, поэтому он неоднозначен по своей природе.Чтобы преобразовать его в фактическую временную метку (абсолютный момент времени, независимый от часовых поясов), вам необходимо знать, в каком часовом поясе он был измерен.

Позвонив по номеру localDateTime.toInstant(ZoneOffset.UTC), вы предполагаете, что ваш localDateTimeбыл фактически измерен в часовом поясе UTC. Вместо этого вы должны использовать часовой пояс, в котором хранится LocalDateTime. Если вы не знаете, тогда ваши входные данные по своей сути неоднозначны, и вам нужно сначала исправить это.

Обратите внимание, что это не имеет ничего общего с тем фактом, что эпоха Unix обычно указывается в UTC.Мы могли бы также сказать, что эпоха Unix - 1970-01-01T08:00:00+08:00, и это будет тот же самый момент во времени.

Остальное мне кажется правильным.

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