3

我的日期格式是yyyy-MM-dd'T'HH:mm:ss.SSSZ,它产生日期:

2013-10-08T12:14:39.721+0100

但我需要日期:

2013-10-08T12:14:39.721+01:00

什么日期格式会生成带有冒号的偏移量?

4

4 回答 4

9

你可以使用这种格式

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");

查看文档以获取更多信息。

PS:-正如我的朋友@Thomas所说,这仅适用于Java 7及更高版本。

于 2013-10-08T11:26:05.330 回答
1

如果您想使用SimpleDateFormat实现,您可以使用适用于 JDK 7 的RJ 解决方案。您也可以使用Joda time实现相同的功能,如下所示

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ");
String str = fmt.print(dt);
System.out.println(str);

哪个输出,

2013-10-08T20:36:19.802+09:00
于 2013-10-08T11:38:04.553 回答
1

tl;博士

OffsetDateTime.parse( "2013-10-08T12:14:39.721+01:00" )
              .toString()

2013-10-08T12:14:39.721+01:00

java.time

使用现代的 java.time 类来代替麻烦的遗留日期时间类。

您想要的输出格式恰好是OffsetDateTime::toString方法的默认值。

OffsetDateTime odt = OffsetDateTime.parse( "2013-10-08T12:14:39.721+01:00" ) ;
String output = odt.toString() ;

输出:2013-10-08T12:14:39.721+01:00

请参阅在 IdeOne.com 上实时运行的代码

顺便说一句,根据我的经验,确实最好按照您在问题中提出的格式设置您的偏移量:使用冒号,填充零,以及 hours 和 minutes。虽然ISO 8601标准和其他标准在技术上允许变化,但我发现一些库和协议只需要完全扩展的格式。所以使用+05:00而不是+05or +5:00or +0500

于 2017-09-02T19:52:25.560 回答
0

将其简单地更改为该格式不起作用?或者您无法更改日期格式?尝试:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSXXX");

它应该返回用冒号分隔的最后一部分。

请参阅:Java SimpleDateFormat 时区偏移量,分钟用冒号分隔

于 2013-10-08T11:24:57.823 回答