5

日付応答をEST時間に変換する必要があるsoapクライアント要求があります。

画面で、午前11時45分を選択し、午前11時45分をデータベースに保存します。

ただし、SOAPリクエストは次のように受信されます。

2012-11-24T16:45:00.000Z

Javaコードでは、日付は次のように出力されます。

11月24日土曜日11:45:00EST2012..。

しかし、別のWebサービス呼び出しを行い、最終的にデータベース(SQL Server)に保存します。2012-11-2416:45

Calendar incomingWebServiceCalendarObject = fromWebService.getDateTime()

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

... 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 = 3600000、useDaylight = 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、HOUR_OF_DAY = 11、MINUTE = 45、SECOND = 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);
4

1 に答える 1

4

最初のSOAPリクエストはUTC(.000Zタイムゾーン情報)として受信され、その後、Calendarオブジェクトが ,zone=sun.util.calendar.ZoneInfo[id="America/New_York"...表示のために東部標準時に変換し、元のSOAP情報をデータベースに保持します。

表示されていないのは、データベースをどのように永続化しているか、およびどのタイムスタンプを使用しているかです。

私はあなたが起こっている2つの状況だけを考えることができます:

  1. データベースはUTCのみであり、タイムゾーン情報は保存されません。つまり、DBとの間の各呼び出しは常にUTCであり、タイムゾーンはコードに任されています。
  2. データベースはタイムスタンプデータ型を介してタイムゾーン情報を保存しますが、UTC情報をローカルのCalendarオブジェクトではなく、SOAPリクエストからデータベースに送信します。

あなたが提供したソリューションは、上記のリストの2番目を満たしていると思いますが、他の詳細を確認しないと、確実に判断するのは難しいと思います。

いくつかのブレークポイントを削除し、コードをステップ実行して、日付オブジェクトがいつ/どこで作成されているか、およびどのような情報で作成されているかを正確に確認することをお勧めします。

于 2012-11-26T16:05:03.560 に答える