我有一个肥皂客户端请求,我需要将日期响应转换为 EST 时间。
在我的屏幕上,我选择了:上午 11:45,我想将上午 11:45 保存在数据库中。
但是 SOAP 请求是这样的:
2012-11-24T16:45:00.000Z
在java代码中,日期打印为:
美国东部时间 2012 年 11 月 24 日星期六 11:45:00 ...
然而,我们进行了另一个最终保存到数据库(SQL Server)的网络服务调用:2012-11-24 16:45
Calendar incomingWebServiceCalendarObject = fromWebService.getDateTime()
Calendar outgoingWebServiceCalendarObject = incomingWebServiceCalendarObject;
webServiceBean.setDateTime(outgoingWebServiceCalendarObject);
Run Code Online (Sandbox Code Playgroud)
... 我如何保存为 2012-11-24 11:45?
此外,这里是公历:
java.util.GregorianCalendar[time=1353775500000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings=36000 =true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8, startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1, YEAR=2012,MONTH=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,HOUR1=24,DAY_OF_YEAR=329 0,MILLISECOND=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);
Run Code Online (Sandbox Code Playgroud)
您的初始 SOAP 请求以 UTC(您的时区信息)形式传入.000Z,之后您的 Calendar 对象将其转换为东部时间 ,zone=sun.util.calendar.ZoneInfo[id="America/New_York"...进行显示,然后您将原始 SOAP 信息保存到数据库中。
您没有显示的是如何保存数据库以及使用哪个时间戳。
我只能想到你遇到的两种情况:
我认为您提供的解决方案满足上面列表中的#2,但同样,在没有看到任何其他细节的情况下,我认为很难确定。
我建议删除一些断点并单步执行代码,以准确查看创建日期对象的时间/地点以及使用哪些信息。