安卓时间格式ISO 8601

16

我正在使用Android和Joda Time库,试图转换用户的时区,以便稍后将其格式化为:例如2012-11-12T21:45:00+02:00。

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

以上的代码失败了 - 有人知道如何将 "Europe/London" (时区ID) 转换为偏移量,以便我可以将其放入 ISO 8601 格式中吗?

2个回答

29
如果我正确理解您的目标,您可以直接使用SimpleDateFormat类。
示例代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.UK);
String formattedDate = sdf.format(new Date());

您可以在SimpleDateFormat文档中查看相关技术信息。
祝好。

你的注释中缺少年份,但那是我在上面代码中使用的格式。 - Luis
我使用了您的格式字符串,在JS和Java中得到了不同的结果。应该是 yyyy-MM-dd'T'HH:mm:ss.SSS'Z' - OhhhThatVarun

11

API 26增加了对Java中许多时间和日期类的支持。因此,现在也可以应用此解决方案:https://dev59.com/wF8e5IYBdhLWcg3wlbBR#25618897

// 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

Credits to JodaStephen.

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


2
FYI:java.time的许多功能已经在ThreeTen-Backport项目中向Java 6和Java 7进行了回溯。该项目还进一步适用于早期的Android,即ThreeTenABP项目。请参见如何使用ThreeTenABP… - Basil Bourque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接