Формат даты JodaTime DateTime, ISO8601 GMT

Как получить следующий формат:

2015-01-31T00:00:00Z

(формат даты ISO8601 GMT)

Из объекта DateTime во время joda (java)? Например.

DateTime time = DateTime.now();
String str = // Get something like 2012-02-07T00:00:00Z

Спасибо!:)

Ответы

Ответ 1

JODA Javadoc указывает, что toString для DateTime выводит дату в ISO8601. Если вам нужно, чтобы все поля времени были обнулены, сделайте следующее:

final DateTime today = new DateTime().withTime(0, 0, 0, 0);
System.out.println(today);

Это будет включать миллисекунды в выходной строке. Чтобы избавиться от них, вам нужно использовать форматтер, который предлагает @jgm.

Если вы хотите, чтобы он соответствовал формату, который вы запрашиваете в этом сообщении (с буквальным символом Z), это будет работать:

System.out.println(today.toString(DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'")));

Если вам нужно значение UTC, инициализируйте его следующим образом:

final DateTime today = new DateTime().withZone(DateTimeZone.UTC).withTime(0, 0, 0, 0);

Ответ 2

@jgm В документе описывается ISODateTimeFormat.dateTime()

Возвращает форматтер, который объединяет полную дату и время, разделенные 'T' (yyyy-MM-dd'T'HH: mm: ss.SSSZZ).

но если вы установите часовой пояс, например,

DateTimeFormatter fmt = ISODateTimeFormat.dateTime();  
System.out.println(fmt.print(new DateTime().toDateTime(DateTimeZone.UTC)));

он заканчивается на Z.

Ответ 3

использовать ISODateTimeFormat

DateTime dt = new DateTime();
DateTimeFormatter fmt = ISODateTimeFormat.dateTimeNoMillis();
String str = fmt.print(dt);

Ответ 4

Настройте a DateTimeFormatter:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
formatter.print(time);