2016-10-20 8 views
0

に依存して私が突然、各時間帯ごとに異なるた結果、実験 たjava.sql.Timestamp#のvalueOf結果は、デフォルトのタイムゾーン

for (String tz: TimeZone.getAvailableIDs()) { 
    TimeZone.setDefault(TimeZone.getTimeZone(tz)); 
    timestamp = Timestamp.valueOf("1970-01-01 00:00:00.000"); 
    System.out.println(tz + " - " + timestamp.getTime()); 
} 

作りました。これの背後にある論理は何ですか?常にタイムスタンプはタイムゾーンに依存しないと考えていました。

+1

' "1970-01-01 00:00:00.000"' _some_の文脈で解釈されなければなりませんでしたこれはデフォルトのタイムゾーンを使用します。あなたはそれがちょうどUTCを使うと思いましたか? – GriffeyDog

+0

@GriffeyDogええ、問題は、日付文字列がDBから来て、UTC日付として扱われることです。 – kilonet

+1

'String'はタイムゾーンを持っていません。 'String'を' Timestamp'に変換するには、タイムゾーンを適用する必要があります。 'valueOf'はデフォルトのタイムゾーンを使用して' String'から 'Timestamp'への変換を行います。 – GriffeyDog

答えて

0

タイムゾーンを変更した場合、タイムスタンプはUTCタイムゾーンを使用するため、異なる場合があります。つまり、ロンドンで1970-01-01 00:00:00.000(GMT + 1)のスペイン語カナリア諸島が1969-12-31 23 :00:00.000(GMT)

* EDIT:ほとんどの目的のために、UTCはGMTで交換可能と考えられている

+1

実際には、1970年1月1日、ロンドンはGMT + 1、カナリア諸島はGMTです。あなたの時は正しいですが、あなたのオフセットは1時間もずれています。 –

+0

@MattJohnson教えてくれてありがとう! – Raider

関連する問題