当前位置:  开发笔记 > 编程语言 > 正文

在Java中输出RFC 3339时间戳

如何解决《在Java中输出RFC3339时间戳》经验,为你挑选了4个好方法。

我想输出一个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开始,有XISO8601时区的模式字符串.对于您描述的格式的字符串,请使用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".希望能帮助到你.



1> Daniel Beck..:

从Java 7开始,有XISO8601时区的模式字符串.对于您描述的格式的字符串,请使用XXX.请参阅文档.

样品:

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
        .format(new Date()));

结果:

2014-03-31T14:11:29+02:00



2> 小智..:

看看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);


这个答案实际上对一个例子很有用.

3> jjohn..:

从"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");
}



4> 小智..:

我花了很多时间寻找同一问题的答案,我在这里找到了一些东西: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".希望能帮助到你.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有