ISO 8601 中的 Android 时间

Posted

技术标签:

【中文标题】ISO 8601 中的 Android 时间【英文标题】:Android time in iso 8601 【发布时间】:2012-11-10 23:56:05 【问题描述】:

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

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

上面的代码失败了 - 任何人都知道我怎样才能获取“欧洲/伦敦”(Timezone.getID)并将其转换为偏移量,以便我可以将其放入 ISO 8601 格式?

【问题讨论】:

【参考方案1】:

如果我正确理解了您的目标,您可以直接使用SimpleDateFormat 类。

示例代码:

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

您可以在SimpleDateFormat 中查看文档

问候。

【讨论】:

您的评论中缺少年份,但这是我在上面的代码中使用的格式。【参考方案2】:

API 级别 26 增加了对来自 Java 的许多时间和日期类的支持。所以这个解决方案现在也可以应用: https://***.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

【讨论】:

仅供参考:很多 java.time 功能在ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。在ThreeTenABP 项目中进一步适用于早期的Android。见How to use ThreeTenABP…

以上是关于ISO 8601 中的 Android 时间的主要内容,如果未能解决你的问题,请参考以下文章

Python 中的 ISO 时间 (ISO 8601)

识别 ISO 8601 中的时区

Java 中的 ISO 8601 时间间隔解析

ISO 8601:时间和日期的表示标准

ISO-8601 周编号与 PHP 中的“Outlook”编号

是否有标准方法来指示 ISO8601 格式的时间戳中的无效值?