2017-12-12 18 views
1
  1. 私のアプリケーションには異なるタイムゾーンをサポートする必要があります。
  2. 私のJVMを挿入するには、デフォルトでUTC時刻があるので、@CreationTimestampとJUpタイムゾーンを参照する@UpdateTimestampの助けを借りて、UTC時刻として作成および更新された日付を挿入して休止状態にします。
  3. 各リクエストは異なるタイムゾーンから送信されています。タイムゾーンに基づいて、その特定のタイムゾーンまでのUTC時間を解析する必要があります。
  4. 私はすべてのレコードに対して手動で日付を解析したくありません。フェッチ中にタイムゾーンを指定した場合のように、休止状態にオプションがあります。与えられたタイムゾーンごとに作成され、更新された日付を取得できます(タイムゾーンはフェッチのために動的です)。
+0

してくださいまた、このリンクを見てhttps://stackoverflow.com/questions/46493135/can-hibernate-convert-date-field-into-given-timezone-at-transaction-or-session-l –

答えて

3

datetimeのベストプラクティスに関しては、すでにいくつかのスレッドがあります。 Daylight saving time and time zone best practices

は、私は次のことを示唆している:

  • 常にバックエンドとDB内UTCなど、すべての日付時刻を扱います。
  • クライアントにdatetimeをUTCとして転送します。
  • クライアントのUTC datetimeをlocaldatetimezoneに変換します。表示と更新の目的。

私の経験から、クライアントがすべてのローカル日時/ゾーン変換を処理し、すべての通信およびバックエンドの用途にUTCを使用することをコミットするのが最善の方法です。

ウェブページに直接日付をダンプする場合は、http://momentjs.com/のようなjsライブラリを使用して日付をロケールdatetimeに変換できます。

+0

現在のところ、私はあなたがUIと休憩サービスのために言ったステップを実装しようとしています。与えられたタイムゾーンごとに日付を指定する必要があります –

+0

ここでは、localdatetimezoneの変換に関するスレッドが見つかりました:https://stackoverflow.com/a/34605826/ 2067875 したがって、残りのリクエストで要求されたタイムゾーンを取得した後、これで必要なタイムゾーンに答えを変換することができます。 –

1

変換するいくつかの例の下のタイムゾーン で日付を変換するユーティリティ(汎用メソッド)を作成できます。

public static Date buildUTCDate(String dateString) throws ParseException { 
    SimpleDateFormat dateFormat = new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT); 
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
    return dateFormat.parse(dateString); 
} 

public static String dateToString(Date date) { 
    return new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT).format(date); 
} 

    public static Date buildUTCDate(Date date) { 

    SimpleDateFormat fromDateFormat = new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT); 
    SimpleDateFormat toDateFormat = new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT); 
    toDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
    String dateString = new SimpleDateFormat(SecureCareConstant.SQL_TIMESTAMP_FORMAT).format(date); 
    try { 
     return fromDateFormat.parse(toDateFormat.format(fromDateFormat.parse(dateString))); 
    } catch (ParseException e) { 
     LOGGER.error("ParseException in buildUTCDate()", e); 
    } 
    return null; 
} 
    public static Date getCurrentTimeZoneDate(final Date date) { 
    Calendar c = Calendar.getInstance(); 
    c.setTime(date); 
    TimeZone z = c.getTimeZone(); 
    int offset = z.getRawOffset(); 
    if (z.inDaylightTime(new Date())) { 
     offset = offset + z.getDSTSavings(); 
    } 
    int offsetHrs = offset/1000/60/60; 
    int offsetMins = offset/1000/60 % 60; 
    c.add(Calendar.HOUR_OF_DAY, (+offsetHrs)); 
    c.add(Calendar.MINUTE, (+offsetMins)); 
    return c.getTime(); 
} 
public static String toLocalTime(Date dateUTC) { 
    if (dateUTC == null) { 
     return StringUtils.EMPTY; 
    } 
    SimpleDateFormat dateFormat = new SimpleDateFormat(SecureCareConstant.WEB_SERVICE_DATE_FORMAT); 
    return dateFormat.format(new Date(dateUTC.getTime() + TimeZone.getDefault().getOffset(dateUTC.getTime()))); 
}