Java和SOAP数据客户端请求为UTC时间并保存为EST时间

时间:2012-11-20 21:11:15

标签: java soap

我有一个soap客户端请求,我需要将日期响应转换为EST时间。

在我的屏幕上,我选择:上午11点45分,我想在上午11点45分保存在数据库中。

但SOAP请求的来源是:

2012-11-24T16:45:00.000Z

在java代码中,日期打印为:

美国东部时间2012年11月24日星期六11:45:00 ...

然而,我们进行另一个Web服务调用,最终保存到数据库(SQL Server): 2012-11-24 16:45

Calendar incomingWebServiceCalendarObject = fromWebService.getDateTime()

Calendar outgoingWebServiceCalendarObject = incomingWebServiceCalendarObject;
webServiceBean.setDateTime(outgoingWebServiceCalendarObject);

... 我怎么能保存为2012-11-24 11:45?

此外,这是格里高利历:

java.util.GregorianCalendar中[时间= 1353775500000,areFieldsSet =真,areAllFieldsSet =真,宽大=真,区= sun.util.calendar.ZoneInfo [ID = “美国/纽约”,偏移= -18000000,dstSavings = 3600000,useDaylight =真,过渡= 235,lastRule = java.util.SimpleTimeZone中[ID =美国/纽约,偏移= -18000000,dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 3,startMonth = 2,朝九特派= 8,startDayOfWeek = 1,开始时间= 7200000,startTimeMode = 0,endMode = 3,endMonth = 10,endday指定= 1,一个endDayOfWeek = 1,结束时间= 7200000,endTimeMode = 0]],Firstdayofweek可= 1,minimalDaysInFirstWeek = 1,ERA = 1,YEAR = 2012,月= 10,WEEK_OF_YEAR = 47,WEEK_OF_MONTH = 4,DAY_OF_MONTH = 24,DAY_OF_YEAR = 329,DAY_OF_WEEK = 7,DAY_OF_WEEK_IN_MONTH = 4,AM_PM = 0,HOUR = 11,HOUR_OF_DAY = 11,MINUTE = 45 ,SECOND = 0,微差= 0,ZONE_OFFSET = -18000000,DST_OFFSET = 0]

...

我做了以下操作,这似乎有效,这是一个正确的方法,根据我的要求,代码试图完成的是什么?

final long offset = this.secondaryScheduleTime.getTimeInMillis() + TimeZone.getTimeZone("EST").getRawOffset();
final Date estTime = new Date(offset);
final Calendar c2 = Calendar.getInstance();
c2.setTime(estTime);

1 个答案:

答案 0 :(得分:3)

您的初始SOAP请求以UTC(.000Z是您的时区信息)的形式进入,之后您的Calendar对象将其转换为东部时间,zone=sun.util.calendar.ZoneInfo[id="America/New_York"...以供显示,然后您将保留原始SOAP信息到你的数据库。

您未显示的内容是 如何持久保存数据库以及 时间戳。

我只能想到你正在进行的两种情况:

  1. 您的数据库仅限UTC,不保存时区信息。这意味着每次对数据库的调用始终是UTC,时区由代码完成。
  2. 您的数据库通过Timestamp数据类型保存时区信息,但您要将SOAP信息中的UTC信息发送到数据库,而不是本地Calendar对象。
  3. 我认为您提供的解决方案满足上面列表中的#2,但同样,在没有看到任何其他细节的情况下,我认为很难确定。

    我建议删除一些断点并单步执行代码,以确切了解日期对象的创建时间和位置,以及使用哪些信息。