2012-11-22 46 views
4

使用android和joda時間庫 - 我試圖轉換用戶的時區,以便將其格式化爲:2012-11-12T21:45:00 + 02:00例如。Android時間ISO 8601

DateTimeZone zone = DateTimeZone.forID(TimeZone.getDefault().getID()); 

上面的代碼失敗 - 任何人都知道我可以拿「歐洲/倫敦」(Timezone.getID),並將其轉換爲偏移,所以我可以把它在ISO 8601的格式?

回答

5

如果我正確理解你的目標,你可以直接使用SimpleDateFormat類。

示例代碼:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.UK); 
String formattedDate = sdf.format(new Date()); 

你可以看到docmentation在SimpleDateFormat

問候。

+1

我需要在這個格式 - 11-12T21:45:00 + 02:00 – Ranco

+0

你缺少在您的評論的一年,但是這是我在代碼中使用上述格式。 – Luis

+0

您的格式字符串缺少引號... – ValarDohaeris

1

API級別26增加了對來自Java的許多時間和日期類的支持。所以這個解決方案現在也可以適用於: https://stackoverflow.com/a/25618897/3316651

// works with Instant 
Instant instant = Instant.now(); 
System.out.println(instant.format(DateTimeFormatter.ISO_INSTANT)); 

// works with ZonedDateTime 
ZonedDateTime zdt = ZonedDateTime.now(); 
System.out.println(zdt.format(DateTimeFormatter.ISO_INSTANT)); 

// example output 
2014-09-02T08:05:23.653Z 

貸JodaStephen。

Android的文檔: https://developer.android.com/reference/java/time/format/DateTimeFormatter.html#ISO_INSTANT

+0

供參考:許多* java.time *功能在[*** ThreeTen-Backport ***](http://www.threeten.org/threetenbp/)項目中反向移植到Java 6和Java 7 。在[*** ThreeTenABP ***](https://github.com/JakeWharton/ThreeTenABP)項目中進一步適用於早期的Android。請參閱[*如何使用ThreeTenABP ... *](http://stackoverflow.com/q/38922754/642706)。 –