我想输出一个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")
Daniel Beck.. 41
从Java 7开始,有X
ISO8601时区的模式字符串.对于您描述的格式的字符串,请使用XXX
.请参阅文档.
样品:
System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX") .format(new Date()));
结果:
2014-03-31T14:11:29+02:00
小智.. 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);
这个答案实际上对一个例子很有用. (2认同)
jjohn.. 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"); }
小智.. 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".希望能帮助到你.
从Java 7开始,有X
ISO8601时区的模式字符串.对于您描述的格式的字符串,请使用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的日期格式化变得更加容易.
乔达示例:
DateTime dt = new DateTime(2011,1,2,12,45,0,0, DateTimeZone.UTC);
DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
String outRfc = fmt.print(dt);
从"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"); }
我花了很多时间寻找同一问题的答案,我在这里找到了一些东西: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".希望能帮助到你.