Если вы не знаете правильный часовой пояс, это невозможно.
Строка, подобная вашей, соответствует формату ISO 8601 для даты и времени смещения, то есть даты и времени со смещением UTC (но без часового пояса). Поэтому единственное, что нужно сделать, это разобрать в OffsetDateTime
:
String dateTimeString = "2018-03-04T03:45:00.000-07:00";
OffsetDateTime dateTime = OffsetDateTime.parse(dateTimeString);
System.out.println(dateTime);
Выход:
2018-03-04T03: 45-07: 00
Синтаксический анализ работает без какого-либо явного средства форматирования, поскольку OffsetDateTime
и другие классы даты и времени java.time
анализируют формат ISO 8601 как их значение по умолчанию (а также печатают ISO 8601 обратно в их toString
методах). java.time
- современный API даты и времени Java. (Я специально выбрал другую дату и время, чтобы указать следующий момент.)
Чтобы преобразовать его в дату, часовой пояс имеет решающее значение . Давайте попробуем с тремя разными часовыми поясами:
System.out.println(dateTime.atZoneSameInstant(ZoneId.of("Pacific/Apia")).toLocalDate());
System.out.println(dateTime.atZoneSameInstant(ZoneId.of("Pacific/Pago_Pago")).toLocalDate());
System.out.println(dateTime.atZoneSameInstant(ZoneId.of("Asia/Kamchatka")).toLocalDate());
Выход:
2018-03-05
2018-03-03
2018-03-04
У нас три разные даты, 3, 4 и 5 марта. Потому что на земле никогда не бывает одной и той же даты. Сделай свой выбор. : -)
Возможно, будет нормально использовать настройку часового пояса вашей JVM. Если это так, используйте ZoneId.systemDefault()
в качестве аргумента atZoneSameInstant()
. Однако настройку часового пояса можно изменить в любое время из другой части вашей программы или из другой программы, работающей в той же JVM.
Вопрос: Могу ли я использовать java.time с Java 7?
Да, java.time
требует как минимум Java 6 .
- В Java 8 и более поздних версиях и на новых устройствах Android (от 26 уровня API, как мне сказали) новый API поставляется встроенным.
- В Java 6 и 7 получают ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310, где впервые был описан современный API).
- На (более старом) Android используйте Android-версию ThreeTen Backport. Это называется ThreeTenABP. Убедитесь, что вы импортируете классы даты и времени из пакета
org.threeten.bp
и подпакетов.
Ссылки