2017-10-22 3 views
-1

私は、次のコードを持って無視:私は、日付オブジェクトとこのコードを呼び出すときのSimpleDateFormatにはsetTimeZoneコール

SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault()); 
sdf.setTimeZone(TimeZone.getDefault()); 
return sdf.format(date); 

を、それがタイムゾーンを設定することなく(明らかStringとして)同じ日付を返します。

私はjava.util.Dateオブジェクトがタイムゾーンに依存しないと理解していました。したがって、私がSimpleDateFormatにタイムゾーンを設定した場合、それは変更されるはずです。しかし、それはしません。

sdf.getTimeZone()をチェックすると、自分のタイムゾーンがUTC + 03:00に正しく設定されていることがわかります。

誰かがこの問題を解決する方法を知っていますか?

+0

あなたが正しいです、 'java.util.Date'はタイムゾーンを認識していません。 'new SimpleDateFormat'を作成すると、JVMのデフォルトのタイムゾーンが使用されるため、' Timezone.getDefault() 'の設定は冗長です(そのため、同じ結果が得られます)。書式設定時には、タイムゾーンが常にバックグラウンドで表示されます。 –

答えて

-1

代わりに、より良い方法はJoda Timeです。それはあなたが望むものを与えるフォーマットのZZ属性を持っています。 使い方は簡単です。

DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ssZZ").withLocale(Locale.RU); 
0

TimeZoneを取得するにはUTC形式で

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-YYY HH:mm:ss Z",Locale.ENGLISH); 

     simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 

     return simpleDateFormat.format(new Date()); 

上記の形式は22-10-2017午前18時05分50秒UTCような結果を提供します。

上記の形式は22-10-2017 18時05分50秒UTCような結果を提供しますローカルフォーマットでのタイムゾーン(電話またはデバイスのタイムゾーン)

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-YYY HH:mm:ss Z",Locale.ENGLISH); 

      simpleDateFormat.setTimeZone(TimeZone.getDefault()); 

      return simpleDateFormat.format(new Date()); 

または

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-YYY HH:mm:ss Z",Locale.ENGLISH); 
      return simpleDateFormat.format(new Date()); 

を取得するには+5:30(ヒント:インド-For)。

又は

上記フォーマットは22-10-2017午前18時05分50秒のような結果が得られるIS T.(ヒント:-Forインド)

ヒント: - uは日に、このフォーマットされた文字列を渡す場合

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-YYY HH:mm:ss Z",Locale.ENGLISH); 

     simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 

     Date d = null; 

     try { 
      d =simpleDateFormat.parse("22-10-2017 18:05:50 UTC"); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     return d.toString(); 

以下のように返される出力は、ローカルタイムゾーンやデフォルトのタイムゾーンすなわちデバイスのタイムゾーンと同じになります。 (22-10-2017 18:05:50 UTC + 5:30または22-10-2017 18:05:50 IST)。

上記のタイムゾーンセットがUTCであっても、コンテンツを自分のDateオブジェクトに渡すと、デバイスタイムゾーンのみで出力されます。