私は次のコードを書きました。 UTC形式のDateオブジェクトを取得したい。
SimpleDateFormat
を使用して、UTCで予想される日付文字列を取得できます。しかし、同じSimpleDateFormat
オブジェクトを使用すると、UTC形式のオブジェクトを取得できません。 IST形式でオブジェクトを返しています。
検索後、Dateオブジェクトにはタイムスタンプ情報が格納されていないことがわかりました。
UTC形式の日付オブジェクトを取得するにはどうすればよいですか?
import Java.text.DateFormat;
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Date;
import Java.util.TimeZone;
public class dddd {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Input - "+1393572325000L);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date= new Date(1393572325000L);
String dateString = formatter.format(date);
System.out.println("Converted UTC TIME (using Format method) : "+dateString);
Date date2 =null;
try {
date2 = formatter.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
System.out.println("Parsed Date Object (using Parse method) : "+date2);
System.out.println("Expected Date Object : Fri Feb 28 07:25:25 UTC 2014");
}
}
これにより、次の出力が出力されます。
Input - 1393572325000
Converted UTC TIME (using Format method) : 2014-02-28 07:25:25
Parsed Date Object (using Parse method) : Fri Feb 28 12:55:25 IST 2014
Expected Date Object : Fri Feb 28 07:25:25 UTC 2014
final Date currentTime = new Date();
final SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d, yyyy hh:mm:ss a z");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("UTC time: " + sdf.format(currentTime));
日付にはタイムゾーンがありません。表示されているのは、Date.toString()
メソッドによる日付の書式設定のみです。このメソッドは、常にローカルタイムゾーンを使用して、タイムゾーンに依存しない日付を理解可能な文字列に変換します。
UTCタイムゾーンを使用して、タイムゾーンに依存しない日付を文字列として表示する場合は、UTCタイムゾーンでSimpleDateFormatを使用します(既に質問で行っているように)。
言い換えれば、タイムゾーンは日付のプロパティではありません。これは、日付を文字列に変換するために使用される形式のプロパティです。
Java 8、Java 8 Java.time.Instantライブラリ:
Instant.now();
その少数のコードは、UTCタイムスタンプを返します。
今からタイムゾーンの差を引くことができます。
final Calendar calendar = Calendar.getInstance();
final int utcOffset = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);
final long tempDate = new Date().getTime();
return new Date(tempDate - utcOffset);