我想输出带有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");

我为RFC3339制作了 InternetDateFormat 类。

但源代码评论是日文。

PS:我创建了英文版并重构了一点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top