java.time
Если вы хотите преобразовать время дня в миллисекунды:
ZoneId zone = ZoneId.of("Europe/Rome");
LocalTime timeOfDay = LocalTime.now(zone);
long milliOfDay = TimeUnit.NANOSECONDS.toMillis(timeOfDay.toNanoOfDay());
System.out.println(milliOfDay);
Если вместо этого я буду воспринимать его буквально, когда вы спрашиваете количество миллисекунд с моментаначало дня:
ZonedDateTime now = ZonedDateTime.now(zone);
ZonedDateTime startOfDay = now.toLocalDate().atStartOfDay(zone);
Duration dur = Duration.between(startOfDay, now);
long millisSinceStartOfDay = dur.toMillis();
System.out.println(millisSinceStartOfDay);
Когда я только что запустил эти два фрагмента (15:18:28 в Италии), они оба напечатали
55108833
Есть ли разница, тогда?В большинстве случаев два приведенных выше фрагмента будут выводить один и тот же результат.Однако, если, например, существует переход на летнее время или обратно (летнее время) ранее в тот же день, местное время не будет отражать время, прошедшее с начала дня, и тогда фрагменты будут давать разные результаты.Поэтому вы должны тщательно выбрать, какой из них вы хотите.
Поскольку количество миллисекунд с полуночи никогда не превысит int
, вы можете безопасно привести его к этому типу, если хотите.
Вместо давно устаревшего и плохо спроектированного Calendar
класса я использую java.time
, современный Java-интерфейс даты и времени.С ним гораздо приятнее работать.
Вопрос: Можно ли использовать java.time на Android?
Да, java.time
прекрасно работает на старых и новых устройствах Android.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от уровня API 26, как мне сказали), современный API поставляется встроенным.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. ссылки внизу).
- На (более старом) использовании AndroidAndroid-версия ThreeTen Backport.Это называется ThreeTenABP.И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки