(React native) Как использовать SafeAreaView для Android-надрезов?

Короткий ответ

Date input = new Date();
LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

Объяснение

Несмотря на свое имя, java.util.Date представляет собой мгновение на линии времени, а не «дату». Фактические данные, хранящиеся в объекте, - это long счет миллисекунд с 1970-01-01T00: 00Z (полночь в начале 1970 г. / UTC).

Эквивалентный класс для java.util.Date в JSR-310 является Instant, поэтому существует удобный способ toInstant() для обеспечения преобразования:

Date input = new Date();
Instant instant = input.toInstant();

Экземпляр java.util.Date не имеет понятия о временной зоне. Это может показаться странным, если вы назове toString() на java.util.Date, потому что toString относится к временной зоне. Однако этот метод фактически использует временную зону Java по умолчанию для предоставления строки. Часовой пояс не является частью фактического состояния java.util.Date.

Instant также не содержит никакой информации о временной зоне. Таким образом, для преобразования из Instant в локальную дату необходимо указать временную зону. Это может быть зона по умолчанию - ZoneId.systemDefault() - или это может быть временная зона, которую контролирует ваше приложение, например часовая зона, из пользовательских настроек. Используйте метод atZone() для применения временной зоны:

Date input = new Date();
Instant instant = input.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());

A ZonedDateTime содержит состояние, состоящее из локальной даты и времени, временной зоны и смещения от GMT / UTC. Таким образом, дату - LocalDate - можно легко извлечь, используя toLocalDate():

Date input = new Date();
Instant instant = input.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
LocalDate date = zdt.toLocalDate();

Java 9 answer

В Java SE 9 новый метод , который немного упрощает эту задачу:

Date input = new Date();
LocalDate date = LocalDate.ofInstant(input.toInstant(), ZoneId.systemDefault());

Эта новая альтернатива более прямая, создавая меньше мусора и, следовательно, должна работать лучше.

13
задан Thomas Desdoits 11 July 2018 в 15:45
поделиться