首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用'Z‘字面量分析SimpleDateFormat日期

使用'Z‘字面量分析SimpleDateFormat日期
EN

Stack Overflow用户
提问于 2010-04-06 04:17:09
回答 12查看 164.1K关注 0票数 91

我正在尝试解析一个看起来像这样的日期:

2010-04-05T17:16:00Z

这是每个http://www.ietf.org/rfc/rfc3339.txt的有效日期。'Z‘字面(引号)“表示UTC是指定时间的首选参考点。”

如果我尝试使用SimpleDateFormat和以下模式对其进行解析:

代码语言:javascript
复制
yyyy-MM-dd'T'HH:mm:ss

它将被解析为Mon Apr 05 17:16:00EDT 2010

SimpleDateFormat无法解析具有以下模式的字符串:

代码语言:javascript
复制
yyyy-MM-dd'T'HH:mm:ssz
yyyy-MM-dd'T'HH:mm:ssZ

我可以显式地设置要在SimpleDateFormat上使用的TimeZone,以获得预期的输出,但我不认为这是必要的。我是不是漏掉了什么?有没有替代的日期解析器?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2010-04-06 04:47:37

在该模式中,包含'z‘日期-时间组件表示时区格式需要符合General time zone“标准”,例如Pacific Standard Time; PST; GMT-08:00

'Z‘表示时区符合RFC 822 time zone标准,例如-0800

我想你需要一个DatatypeConverter ..。

代码语言:javascript
复制
@Test
public void testTimezoneIsGreenwichMeanTime() throws ParseException {
    final Calendar calendar = javax.xml.bind.DatatypeConverter.parseDateTime("2010-04-05T17:16:00Z");
    TestCase.assertEquals("gotten timezone", "GMT+00:00", calendar.getTimeZone().getID());
}
票数 32
EN

Stack Overflow用户

发布于 2013-03-06 02:40:24

Java不能正确解析ISO日期。

与麦肯齐的答案类似。

只需在解析之前修复Z即可。

代码

代码语言:javascript
复制
String string = "2013-03-05T18:05:05.000Z";
String defaultTimezone = TimeZone.getDefault().getID();
Date date = (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")).parse(string.replaceAll("Z$", "+0000"));

System.out.println("string: " + string);
System.out.println("defaultTimezone: " + defaultTimezone);
System.out.println("date: " + (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")).format(date));

结果

代码语言:javascript
复制
string: 2013-03-05T18:05:05.000Z
defaultTimezone: America/New_York
date: 2013-03-05T13:05:05.000-0500
票数 63
EN

Stack Overflow用户

发布于 2014-06-25 02:46:52

您正在分析的日期为ISO 8601格式。

在Java7中,读取和应用时区后缀的模式应该是yyyy-MM-dd'T'HH:mm:ssX

票数 58
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2580925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档