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)

Другие вопросы по тегам