Java Преобразование dateTime в заданный формат
Мне нужна помощь, чтобы преобразовать заданное значение локальной даты и времени (или дату использования) в один из следующих форматов с часовым поясом (ASIA/COLOMBO). Вот форматы (из API одного сигнала).
"Чт, 24 сентября 2015, 14:00:00 GMT-0700 (PDT)"
"24 сентября 2015 г., 14:00:00 UTC-07: 00"
"2015-09-24 14:00:00 GMT-0700"
"24 сентября 2015 14:00:00 GMT-0700"
"Thu Sep 24 2015 14:00:00 GMT-0700 (Тихоокеанское летнее время)"
Спасибо.
2 ответа
ZonedDateTime
Создайте экземпляр даты, времени и зоны в ZonedDateTime
объект.
LocalDate ld = LocalDate.of( 2015 , Month.SEPTEMBER , 24 ) ;
LocalTime lt = LocalTime.of( 14 , 0 ) ;
ZoneId z = ZoneId.of( "Asia/Colombo" ) ;
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
Если дать java.util.Date
объект, преобразовать в Instant
.
Instant instant = myJavaUtilDate.toInstant() ;
Примените зону для перехода от UTC.
ZoneId z = ZoneId.of( "Asia/Colombo" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
Чтобы создать текст в желаемых форматах, используйте DateTimeFormatter
учебный класс. Это уже много раз рассматривалось в stackru. Поэтому поищите имя этого класса, чтобы узнать больше.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd HH:mm:ss OOOO" ) ;
String output = zdt.format( f ) ;
2015-09-24 14:00:00 GMT+05:30
ISO 8601
Те форматы, которые вы показали, - ужасный выбор. При обмене значениями даты и времени в виде текста используйте стандартные форматы ISO 8601. Стандартные форматы разработаны таким образом, чтобы их было легко анализировать машиной и легко читать люди из разных культур.
В java.time классы используют ISO 8601 форматов по умолчанию при разборе / генерации строк.
Классы java.time были представлены в версии 1.8 и позволяют создавать более гибкий и краткий код.
Instant now = Instant.now();
ZonedDateTime dateTime = now.atZone(ZoneId.of("Asia/Colombo"));
DateTimeFormatter format = DateTimeFormatter.ofPattern("E M d u HH:mm:ss OOOO (z)");
// Using a format to convert at Temporal to a string
String formattedDate = format.format(dateTime);
// Using a format to convert a string to a Instant
Instant parsedDate = Instant.from(format.parse(formattedDate));
Вы можете указать формат даты, используя DateTimeFormatter.ofPattern
или одна из многих констант, определенных в DateTimeFormatter. Созданный мной шаблон соответствует вашему первому примеру.
Старый метод
Эти классы еще не объявлены устаревшими, и я считаю, что для простых случаев они более просты, чем современный метод.
java.text.SimpleDateFormat; Он может обрабатывать переход к объектам String и java.util.Date и обратно.
SimpleDateFormat format = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss Z (z)");
format.setTimeZone(TimeZone.getTimeZone("Asia/Colombo"));
// Note that the current date and time will be used when instantiating a new Date object.
String formattedDate = format.format(new Date());
try {
Date parsedDate = format.parse(formattedDate);
} catch (ParseException exception) {
// Handle malformed date
}
Вам просто нужно будет создать узор для любого формата, который вы хотите использовать.
EEE MMM дд гггг ЧЧ: мм: сс Z (z) = Чт, 24 сентября 2015 г., 14:00:00 GMT-0700 (PDT)