2016-03-23 8 views
1

私のプロジェクトには助けが必要です。ロケールを取得する日付時間GMTから長い文字列をJavaで長く使用する

私のユーザのdatebaseは、このオブジェクトのようなGMTのオフセットがあります。 {userid: "XTGTS12"、timezoneoffset:-8}(GMT/UTC -8:00はPSTロケール) 世界中の異なるtimezoneOffsetの各ユーザー。

私は次のようにダウンタイムサーバーにそれらを伝えるユーザーにプッシュ通知を送信する必要が

「サーバが{0}でシャットダウンしようとしている」 管理が長い私にGMT時間を渡し、私が必要timezoneoffset整数に基づいてすべてのユーザーオブジェクトをプルして、ローカル時刻に日付と時刻、およびユーザーに全体の文字列を生成します。

Javaで実装する方法がわかりません。管理者は、私に2016年4月1日0時00分○○秒

私はtimezoneOffsetでユーザーに送信する必要があり、最終的な文字列であり、長いGMT時間を、渡すと

は-8 「サーバが起こっているのです2016-03-31 16:00:00にシャットダウンする

+0

方法がある[ '.setTimeZone()'] (SimpleDateFormat)に「https://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html#setTimeZone%28java.util.TimeZone%29」と入力し、['TimeZone.getTimeZone( ) '](https://docs.oracle.com/javase/7/docs/api/java/util/TimeZone.html#getTimeZone%28java.lang.String%29) - これらは、タイムスタンプのフォーマットに役立ちます特にタイムゾーンです。 –

+0

私は最良の方法は、クライアント側(おそらくjavascriptで)とサーバー側のGMTのみで現地時間を扱うことだと思います。 –

+0

ところで、そのような重要なメッセージについては、特定の地域に合わせて時間を表示していることを明確にするために、オフセット(またはタイムゾーンの名前)を追加します。 –

答えて

1

これはまさにあなたが必要とするものです。しかし、time zone IDではなくoffset-from-UTCを保存すると、各ユーザーが標準時に「つぶれている」ことになります。つまり、オフセット-8のユーザーは、あなたが言うように、PSTであり、4月1日にはになります。はPDT、またはUTCからは-7時間です。

ここで、固定オフセットを使用し、millisが「GMT時間が長い」と仮定した場合の回答です。このコードでは、Java 8以降に組み込まれたjava.timeフレームワークを使用しています(​​参照)。今

Instant inst = Instant.ofEpochMilli(millis); 
    OffsetDateTime odt = inst.atOffset(ZoneOffset.ofHours(-8)); 
    DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
    System.out.println(f.format(odt)); 

、あなたが実際にAmerica/Los_Angelesようtime zoneまたはPST8PDTをユーザに関連付ける認識すべきである、あなたの代わりにこれを行う必要があります。

Instant inst = Instant.ofEpochMilli(millis); 
    ZonedDateTime zdt = inst.atZone(ZoneId.of("PST8PDT")); 
    DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
    System.out.println(f.format(zdt)); 
関連する問題