2011-06-12 62 views
3

我生成的XML格式包含有效的XML格式的日期,我还需要它包含UTC偏移量。格式化XML的日期以包括UTC偏移量

我尤斯groovy,但我会告诉我使用而不是Java代码(在两种语言的答案是好的):

Calendar c = Calendar.getInstance(); 
long timeZoneOffset = c.timeZone.getOffset(c.getTimeInMillis())/(1000*60*60); 
SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
formatter.format(c.getTime()) + "+0" + timeZoneOffset + ":00"; 

上面的代码give4s我2011-06-12T07:23:25.000+03:00,但是这个代码有两个问题:

  1. 这是丑陋的,并且可能不是最好的方式做到这一点
  2. 它不会像印度时区工作(GMT +5:30),尼泊尔(GMT +5:45

我试着用new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss Z")的时区,但它给了我2011-06-12T07:23:25.000+0300这是不正确的格式(+0300代替的+03:00)。

以我需要的方式格式化日期的其他方法? (最好没有第三方)

回答

2

一个其它替代 - 也埋JAXB API内 - (不需要Jodatime):

Calendar c = ... 
    String printDate = javax.xml.bind.DatatypeConverter.printDateTime(c); 

HTH

+0

谢谢 - 这是最简单的解决方案,可在任何地方安装JRE6。 – RonK 2011-06-12 12:23:22

1

我觉得最优雅的方法就是用Joda-Time库。您需要ISO 8601(第5.4节)格式(如由xs:dateTime XSD型为代表):

DateTime dt = new DateTime(); 
DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); 
System.out.println(fmt.print(dt)); 

结果:

2011-06-12T07:36:32.294 + 02:00

0

您是否尝试过使用XMLGregorianCalendar?例如:

Calendar c = ... 
DataTypeFactory f = DataTypeFactory.newInstance(); 
XMLGregorianCalendar xc = f.newXMLGregorianCalendar(c); 
String str = xc.toXMLFormat(); 

如果日历日期时间与时区偏移,则偏移时区中应包括格式化为每XML数据类型规范的结果字符串。