tl; dr
ZonedDateTime.parse(
"Jun 13 2003 23:11:52.454 UTC" ,
DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" )
)
.toInstant()
.toEpochMilli()
1055545912454
java.time
Этот ответ расширяется до Ответа Lockni .
DateTimeFormatter
Сначала определите шаблон форматирования, соответствующий вашей входной строке, создав объект DateTimeFormatter
.
String input = "Jun 13 2003 23:11:52.454 UTC";
DateTimeFormatter f = DateTimeFormatter.ofPattern ( "MMM d uuuu HH:mm:ss.SSS z" );
ZonedDateTime
Разобрать строку как ZonedDateTime
.Вы можете думать об этом классе как: (Instant
+ ZoneId
).
ZonedDateTime zdt = ZonedDateTime.parse ( "Jun 13 2003 23:11:52.454 UTC" , f );
zdt.toString (): 2003-06-13T23: 11: 52.454Z [UTC]
Count-from-epoch
I do not recommend tracking date-time values as a count-from- эпоха .Это затрудняет отладку, так как люди не могут различить значащую дату-время из числа, так что недопустимые / неожиданные значения могут ускользнуть.Кроме того, такие подсчеты неоднозначны по степени детализации (целые секунды, милли, микро, нано и т. Д.) И в эпоху (не менее двух десятков в различных компьютерных системах).
Но если вы настаиваете, вы можете получить счет в миллисекундах с эпохи первого момента 1970 года в UTC (1970-01-01T00:00:00
) до класса Instant
.Имейте в виду, что это означает потерю данных, поскольку вы сокращаете любые наносекунды до миллисекунд.
Instant instant = zdt.toInstant ();
instant.toString (): 2003-06-13T23: 11: 52.454Z
long millisSinceEpoch = instant.toEpochMilli() ;
1055545912454
О java.time
java.time Framework встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые унаследованные классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java.time классы.
Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
ThreeTen-Extra Проект расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .