java - 为什么 SimpleDateFormat 将 unix 日期显示为 1969 年 12 月 31 日?

标签 java android date

我正在开发一个日期选择器,其中有一个日期范围。我注意到我的所有日​​期都晚了一天,在调查问题时我将问题缩小到 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/

相关文章:

java - 使用 JMockit 模拟被测类的私有(private)方法

java - 在 Android 上运行标准的 Java 代码

java - java中的Oracle连接(错误是无效的列名)

android - 在没有弃用方法和向后支持的情况下集成相机

java - ListView 项目未显示在主 Activity 上

linux - bash 脚本执行日期/时间

java - 如何使用 .jar 中打包的 .png 数据作为 LWJGL 中的纹理?

java - 是否可以使用移动设备和 QRCodes 通过两因素身份验证来实现 OAuth?

java - 使用 spring mvc 转换并保存日期

Where 子句的 Mysql 日期问题