输出 RFC 3339 Java 中的时间戳

2022-09-01 00:47:43

我想输出一个带有 PST 偏移量的时间戳(例如,2008-11-13T13:23:30-08:00)。 似乎没有以小时:分钟格式输出时区偏移量,它排除了冒号。有没有一种简单的方法可以在Java中获取该时间戳?java.util.SimpleDateFormat

// 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?

此外,无法正确解析上面的示例。它会抛出一个 .SimpleDateFormatParseException

// Throws a ParseException
new SimpleDateFormat("yyyy-MM-dd'T'h:m:ssZ").parse("2008-11-13T13:23:30-08:00")

答案 1

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

样本:

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