2013-06-21 10 views
5

I UTCタイムゾーンで日付を返すために、私のカレンダーのインスタンスのためにこれをやっているCalendar.getTime()タイムゾーンが定義されている場合はUTCの日付を返さないが

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:SS Z"); 
TimeZone tz = TimeZoneUtil.getTimeZone(StringPool.UTC); 
formatter.setTimeZone(tz); 

    Date dtStart = null; 
    Date dtEnd = null; 

    try{ 
     dtStart = formatter.parse(formatter.format(startDate.getTime())); 
     dtEnd = formatter.parse(formatter.format(endDate.getTime())); 
    }catch (Exception e) { 
     e.getStackTrace(); 
} 

これは、文字列の日付を返すためにI形式のカレンダーのタイムスタンプまで正常に動作します必要なタイムゾーンを使用していますが、その文字列の日付をDateの日付に解析すると、再びローカルのタイムゾーンが取得されますか? DateオブジェクトをUTCタイムゾーンで保存する必要があります。

ご協力いただきますようお願い申し上げます。

+0

[JavaのUTCまたはGMTで現在の日付と時刻を取得するにはどうすればよいですか?](http://stackoverflow.com/questions/308683/how-can-i-get-the-current-date -and-time-in-utc-or-gmt-in-java) –

答えて

7

あなたは、この使用することができます:

Date localTime = new Date(); 

//creating DateFormat for converting time from local timezone to GMT 
DateFormat converter = new SimpleDateFormat("dd/MM/yyyy:HH:mm:ss"); 

//getting GMT timezone, you can get any timezone e.g. UTC 
converter.setTimeZone(TimeZone.getTimeZone("GMT")); 

System.out.println("local time : " + localTime);; 
System.out.println("time in GMT : " + converter.format(localTime)); 

をそれは与える:
現地時間:金6月21日午前11時55分〇〇秒UTC 2013
GMTの時間:21/06/2013: 11:55:00

私はそれが役に立ちそうです。

乾杯。

0

javaのDateオブジェクトは、常にホストマシン(システム)のタイムゾーン情報に値を格納します。

これは、javadocのである:

Dateクラスは、世界協定時刻(UTC)を反映することを意図しているが、それは、Java仮想マシンのホスト環境に応じて、正確にそうではないことがあります。

非常に進化したJoda Timeを試してください。

+0

これは当てはまりません。デフォルトのDate()コンストラクタは[System.currentTimeMillis()](http://docs.oracle.com/javase/7/docs/api/java/lang/Systemにあります。html#currentTimeMillis%28%29)、これは1970年1月1日UTCからのミリ秒数です。前述したように、「コンピュータ時間」とUTCの間にわずかな差異がある場合は、[うるう秒]に関する説明を参照してください(http://docs.oracle.com/javase/7/docs/api/java/util/Date.html) 。しかし、Joda Timeはこの点で利点はありません。[閏秒のサポート](http://joda-time.sourceforge.net/faq.html#leapseconds)を参照してください。 – devconsole

-1

Dateオブジェクトが現在のタイムゾーンの値を取る理由の良い説明、

このSO answer

EDITをご参照ください。


ここでは、その回答の重要な部分を追加します。


java.util.Dateには特定のタイムゾーンはありませんが、その値はUTCとの関係で最も一般的に考えられます。あなたはそれが現地時間にあると思いますか?

正確に言うと、java.util.Date内の値は、1970年1月1日のUTCの深夜に発生したUnixエポックからのミリ秒数です。同じエポックは、他のタイムゾーンでも記述することができますが、従来の説明はUTCの観点からです。これは固定エポックから数ミリ秒であるため、java.util.Date内の値は、現地時間帯にかかわらず、特定の時点で世界中で同じです。

関連する問題