tl;dr
LocalDate.of( 2014 , Month.NOVEMBER , 22 )
.atStartOfDay( ZoneId.of ( "Asia/Kolkata" ) )
.toInstant()
.toEpochMilli()
Подробности
Ответ Джона Скита правильный и мудрый.
Вот пример кода с использованием классов java.time.
LocalDate
Класс LocalDate
представляет значение без времени суток и без часового пояса.
Часовой пояс имеет решающее значение при определении даты. В любой момент дата варьируется по всему земному шару в зависимости от зоны. Например, через несколько минут после полуночи в Париже, Франция наступает новый день, хотя " вчера» в Монреаль, Квебек.
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
Вы можете указать LocalDate
.
LocalDate ld = LocalDate.of( 2014 , Month.NOVEMBER , 22 );
ld.toString (): 22 ноября 2014 г.
ZonedDateTime
Вам нужно количество миллисекунд с начала эпохи. Я не рекомендую использовать счетчик от эпохи для обработки даты и времени. Но если вы настаиваете, поехали.
Отсчет от эпохи в миллисекундах означает, что нам нужна дата и время дня. У нас свидание. Я предполагаю, что вы хотите, чтобы первый момент дня был временем суток. Не не предполагайте, что это время 00:00:00
. Аномалии, такие как переход на летнее время (DST), могут означать, что день начинается в другое время, например 01:00:00
. Пусть java.time определит этот первый момент, сгенерировав объект ZonedDateTime
из объекта LocalDate
.
LocalDate ld = LocalDate.of ( 2014 , Month.NOVEMBER , 22 );
ZoneId z = ZoneId.of ( "Asia/Kolkata" );
ZonedDateTime zdt = ld.atStartOfDay ( z );
zdt.toString(): 2014-11-22T00:00+05:30[Азия/Калькутта]
Instant
При желании вы можете извлечь Instant
. Класс Instant
представляет момент на временная шкала в UTC с разрешением наносекунды (до девяти (9) цифр десятичной дроби). Разработчик должен думать о UTC как о едином истинном времени и не думать о своем местном часовом поясе во время работы.
Instant instant = zdt.toInstant ();
Instant.toString(): 2014-11-21T18:30:00Z
С момента мы можем запросить количество миллисекунд с эпохи. Имейте в виду, что это влечет за собой потерю данных, так как любые наносекунды будут сокращены до миллисекунд.
long epochMillis = instant.toEpochMilli();
java.util.Date
Я предлагаю избегать устаревших классов даты и времени. Но если вы должны, вы можете конвертировать. Обратите внимание на новые методы, добавленные к старым классам, такие как java.util.Date
< /а>.
java.util.Date utilDate = java.util.Date.from( instant );
О java.time
Платформа java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, .Calendar
и java.text.SimpleDateFormat
.
Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.
Чтобы узнать больше, см. учебник по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8 and SE 9 and later
- Built-in.
- Часть стандартного Java API со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 and SE 7
- Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
- Android
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательным полигоном для возможных дополнений к java.time в будущем. Здесь вы можете найти несколько полезных классов, таких как Interval
a>, YearWeek
, YearQuarter
и подробнее.
person
Basil Bourque
schedule
12.10.2016