题
我想输出带有PST偏移的时间戳(例如,2008-11-13T13:23:30-08:00)。 java.util.SimpleDateFormat
似乎没有以小时:分钟格式输出时区偏移,它排除了冒号。有一种简单的方法可以在Java中获取时间戳吗?
// I want 2008-11-13T12:23:30-08:00
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").format(new Date());
System.out.println(timestamp);
// prints "2008-11-13T12:23:30-0800" See the difference?
此外,SimpleDateFormat
无法正确解析上面的示例。它会抛出ParseException
。
// Throws a ParseException
new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").parse("2008-11-13T13:23:30-08:00")
解决方案
从Java 7开始,ISO8601时区的X
模式字符串。对于您描述的格式的字符串,请使用XXX
。 查看文档。
样品:
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
.format(new Date()));
结果:
2014-03-31T14:11:29+02:00
其他提示
查看 Joda Time 套餐。它们使RFC 3339的日期格式化变得更加容易。
Joda示例:
DateTime dt = new DateTime(2011,1,2,12,45,0,0, DateTimeZone.UTC);
DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
String outRfc = fmt.print(dt);
从<!>开始,完成dept,<!>一个解决方案是在SimpleDateFormat完成后使用正则表达式来修复字符串。类似s /(\ d {2})(\ d {2})$ / $ 1:$ 2 / Perl。
如果您对此感兴趣,我将使用可用的Java代码编辑此响应。
但是,是的。我也遇到了这个问题。 RFC3339,我在看着你!
编辑:
这对我有用
// As a private class member
private SimpleDateFormat rfc3339 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String toRFC3339(Date d)
{
return rfc3339.format(d).replaceAll("(\\d\\d)(\\d\\d)$", "$1:$2");
}
我花了很多时间寻找同一问题的答案,我在这里找到了一些东西: http://developer.android.com/reference/java/text/SimpleDateFormat.html
建议的答案:
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZZZZZ").format(new Date());
如果您注意到我使用的是5'Z'而不是一个。这为输出提供了偏移量中的冒号,如下所示:<!> quot; 2008-11-13T12:23:30-08:00 <!> quot;。希望它有所帮助。
问题是Z生成时区偏移而没有冒号(:)作为分隔符。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ss.SZ");
不是你需要什么?
我找到了一个帮助我解决问题的迷路PasteBin: http://pastebin.com/y3TCAikc
以防其内容后来被删除:
// I want 2008-11-13T12:23:30-08:00
String timestamp = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").format(new Date());
System.out.println(timestamp);
// prints "2008-11-13T12:23:30-0800" See the difference?
// Throws a ParseException
new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").parse("2008-11-13T13:23:30-08:00")
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'h:m:ss.SZ");