我正在开发一个日期选择器,其中有一个日期范围。我注意到我的所有日期都晚了一天,在调查问题时我将问题缩小到 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
关于java - 为什么 SimpleDateFormat 将 unix 日期显示为 1969 年 12 月 31 日?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31688632/