2017-07-27 71 views
1

我正在使用以下代碼以ISO-8601格式獲取日期。對於UTC,返回的值不包含偏移量。如何在Java中獲取UTC + 0的日期?

OffsetDateTime dateTime = OffsetDateTime.ofInstant(
             Instant.ofEpochMilli(epochInMilliSec), zoneId); 

return dateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); 

對於其他時間格式化響應中返回看起來像:

2016-10-30T17:00:00-07:00

在UTC的情況下,返回的值是:

2016-10-30T17:00:00Z

我希望它是:

2016-10-30T17:00:00 + 00:00

注:請不要使用UTC-0作爲-00:00是不是ISO8601兼容。

+0

http://www.joda。org/joda-time/ – sForSujit

回答

2

當偏移量爲零時,內置格式化程序使用ZZZulu的縮寫,意思是UTC

你將不得不使用自定義格式,使用java.time.format.DateTimeFormatterBuilder設置爲當偏移自定義文本爲零:

DateTimeFormatter fmt = new DateTimeFormatterBuilder() 
    // date and time, use built-in 
    .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME) 
    // append offset, set "-00:00" when offset is zero 
    .appendOffset("+HH:MM", "-00:00") 
    // create formatter 
    .toFormatter(); 

System.out.println(dateTime.format(fmt)); 

這將打印:

2016-10- 30T17:00:00-00:00


只是提醒的是-00:00不是ISO8601 compliant。當偏移量爲零時,該標準僅允許Z+00:00(以及變體+0000+00)。

如果你想+00:00,只需更改上面的代碼:

DateTimeFormatter fmt = new DateTimeFormatterBuilder() 
    // date and time, use built-in 
    .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME) 
    // append offset 
    .appendPattern("xxx") 
    // create formatter 
    .toFormatter(); 

此格式時會產生輸出:

2016-10-30T17:00:00 + 00:00

+0

在所有情況下都不會附加-00:00嗎? –

+0

我的壞..它不會 –

+0

@PriyaJain只有當偏移量爲零時它纔會附加'-00:00'。對於所有其他偏移量,它將遵循格式'+ HH:MM'(信號+或 - 然後小時:分鐘) – 2017-07-27 12:12:42

0

如果您可以接受+00:00而不是-00:00,您還可以使用更簡單的DateTimeFormatter

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssxxx"); 

OffsetDateTime odt = OffsetDateTime.parse("2016-10-30T17:00:00Z"); 
System.out.println(fmt.format(odt)); 

我用x而的OffsetDateTime標準toString()方法使用XxX之間的主要區別在於一個返回+00:00而另一個返回Z