Cri*_*ian 36 java timestamp rfc3339
我想输出一个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?
Run Code Online (Sandbox Code Playgroud)
另外,SimpleDateFormat无法正确解析上面的示例.它扔了一个ParseException.
// Throws a ParseException
new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").parse("2008-11-13T13:23:30-08:00")
Run Code Online (Sandbox Code Playgroud)
Dan*_*eck 41
从Java 7开始,有XISO8601时区的模式字符串.对于您描述的格式的字符串,请使用XXX.请参阅文档.
样品:
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
.format(new Date()));
Run Code Online (Sandbox Code Playgroud)
结果:
2014-03-31T14:11:29+02:00
Run Code Online (Sandbox Code Playgroud)
小智 16
看看Joda Time套餐.它们使RFC 3339的日期格式化变得更加容易.
乔达示例:
DateTime dt = new DateTime(2011,1,2,12,45,0,0, DateTimeZone.UTC);
DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
String outRfc = fmt.print(dt);
Run Code Online (Sandbox Code Playgroud)
jjo*_*ohn 12
从"get it done 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");
}
Run Code Online (Sandbox Code Playgroud)
Rah*_*ran 11
我花了很多时间寻找同一问题的答案,我在这里找到了一些东西: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'而不是一个.这为输出提供了一个冒号,如下所示:"2008-11-13T12:23:30-08:00".希望能帮助到你.