【发布时间】:2017-01-08 13:54:31
【问题描述】:
我只是想使用下面的代码将 XMLGregorianCalendar 的实例(我从 JAXWS 获得)转换为特定时区的 GregorianCalendar。
日期即将到来,我想将其转换为 GMT 以便进一步保存到 DB
//soap response <ns4:TimeStamp>2016-06-18T04:43:54-04:00</ns4:TimeStamp>
//dtime is what i got from JAXB for the above date, so I wrote::
Date date = dTime.toGregorianCalendar(TimeZone.getTimeZone("UTC"), Locale.US, null).getTime();
System.out.println(date);
输出:Sat Jun 18 14:13:54 IST 2016
由于上面没有按预期工作,所以我尝试了 DateFormat 并给出了预期的结果。
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
GregorianCalendar gc = dTime.toGregorianCalendar();
System.out.println(df.format(gc.getTime()));
输出:2016-06-18 08:43:54 +0000
toGregorianCalendar(...) 没有给出想要的结果,这可能是什么问题?
我还注意到上面从 toGregorianCalendar 获得的 GregorianCalendar 实例的 fieldSet=false。不确定这是否会导致问题。
java.util.GregorianCalendar[time=1468382241000,areFieldsSet=false,areAllFieldsSet=false,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset= 0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2016,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=12 ,DAY_OF_YEAR=194,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=11,HOUR_OF_DAY=23,MINUTE=57,SECOND=21,MILLISECOND=0,ZONE_OFFSET=-14400000,DST_OFFSET=0]
任何帮助将不胜感激..!!
【问题讨论】:
-
如果输入是
04:43:54,输出怎么可能是05:27:21?时区更改不会影响秒数。 -
抱歉,我错误地添加了错误的输出。现已更正。
-
仅供参考,诸如
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat等非常麻烦的日期时间类现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.见Tutorial by Oracle。