Java日期偏移格式问题?

时间:2013-10-08 11:17:45

标签: java

我的日期格式为yyyy-MM-dd'T'HH:mm:ss.SSSZ,即生成日期:

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

但我需要约会日期:

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

什么日期格式会用冒号生成偏移?

4 个答案:

答案 0 :(得分:8)

您可以使用此格式

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

有关详细信息,请查看doc

P.S:正如我的朋友 @Thomas 所提到的,这只适用于 Java 7 及以上。

答案 1 :(得分:0)

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

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

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

请参阅:Java SimpleDateFormat Timezone offset with minute separated by colon

答案 2 :(得分:0)

如果您想使用SimpleDateFormat实施,可以使用适用于JDK 7的R.J. solution。您也可以使用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

答案 3 :(得分:0)

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

请参阅此code run live at IdeOne.com

顺便说一句,根据我的经验,确实最好按照你在问题中的要求格式化你的UTC偏移:用冒号,填充为零,以及小时和分钟。虽然ISO 8601标准和其他标准在技术上允许变化,但我发现一些库和协议只期望完全扩展的格式。因此,请使用+05:00而不是+05+5:00+0500