ТЛ; др
После исправления неверного ввода текста это значение можно проанализировать с помощью современных java.time классов.
ZonedDateTime.parse(
"Mon Jan 01 00:00:00 CET 2001" // Changed incorrect "Sat" to correct "Mon".
,
DateTimeFormatter.ofPattern(
"EEE MMM dd HH:mm:ss z uuuu"
,
Locale.US // Specify a `Locale` to determine human language and cultural norms used in translation.
) // Returns a `DateTimeFormatter` object to be passed as second argument to `parse` method.
) // Returns a `ZonedDateTime` object.
.toString() // Generates a `String` using standard ISO 8601 format extended by appending zone name in square brackets.
2001-01-01T00: 00 + 01: 00 [Европа / Париж]
Неправильный ввод
Ваш пример входной строки "Sat Jan 01 00:00:00 CET 2001"
неверен. 1 января 2001 года был понедельник, а не суббота. См. отображение календаря .
Кроме того, в начале своего Вопроса вы используете 2000 год, а позже - 2001.
Подробнее
Ответ от Lazarus правильный, но использует устаревшие классы. Правильно, если ваш шаблон форматирования не соответствует входной строке.
Сначала мы должны исправить вашу неверную строку ввода, изменив "Sat" на "Mon".
String input = "Mon Jan 01 00:00:00 CET 2001"; // After altering the original input string, fixing "Sat" to be "Mon".
Используйте только java.time классы для вашей работы с датой и временем. Они заменяют Date
& Calendar
и т. Д.
Определите шаблон форматирования, соответствующий вашей входной строке. Укажите Locale
для определения языка и культурных норм, используемых при переводе из входной строки.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
Создание String
в стандартном формате ISO 8601 , расширенном добавлением названия часового пояса в квадратных скобках.
String output = zdt.toString() ;
System.out.println(output);
2001-01-01T00: 00 + 01: 00 [Европа / Париж]
Чтобы увидеть тот же момент в UTC, извлеките Instant
.
Instant instant = zdt.toInstant() ;
instant.toString (): 2000-12-31T23: 00: 00Z
Советы
- Ваша входная строка использует ужасный формат. Всегда используйте стандартные форматы ISO 8601 для обмена значениями даты и времени в виде текста.
- Укажите собственное имя часового пояса в формате
continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте 3-4-буквенное сокращение, например CET
, EST
или IST
, поскольку они не истинных часовых поясов, не стандартизированы и даже не уникальны (!).
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .