簡體   English   中英

為什么 SimpleDateFormat 將 unix 日期顯示為 1969 年 12 月 31 日?

[英]Why does SimpleDateFormat show unix date as December 31 1969?

我正在研究一個日期選擇器,其中有一個日期范圍。 我注意到我的所有日​​期都晚了一天,在調查問題時,我將問題縮小到 SimpleDateFormat 對象。 無論我給它什么 Unix 時間,它都會將日期設置為前一天。 這種行為的一個例子是

String myFormat = "MM/dd/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat);

Log.d(TAG, "Time Zone: " + cal.getTimeZone().getDisplayName());
Log.d(TAG, "Printable: " + sdf.format(0));

我在記錄器中看到的輸出是

Time Zone: UTC
Printable: 12/31/1969

為什么格式化程序使用 12 月 31 日而不是 1970 年 1 月 1 日?

因為DateFormat也有一個TimeZone (並且您的系統未設置為 UTC)。 您可以使用DateFormat.setTimeZone(TimeZone)更改它。 就像是

String myFormat = "MM/dd/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("Printable: " + sdf.format(0));

輸出是(如您所料)

Printable: 01/01/1970

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM