当前位置: 首页 > 面试题库 >

如果执行新的Date(0L),则纪元不是纪元。为什么?

拓拔俊艾
2023-03-14
问题内容

我的问题很清楚解释:

如果我这样做:

public class Main {

public static void main(String[] args) throws Exception {
        Date d = new Date(0L );
        System.out.println(d);
}

}

我得到以下输出:1970年1月1日星期四01:00:00

根据文档,我期望:1970年1月1日星期四00:00:00 CET

我想错了…

编辑:的确,我读文档太快了。1970年1月1日星期四00:00:00我应该有

那么,如何强制使用GMT并忽略所有本地时间?

编辑,html" target="_blank">解决方案:

public static void main(String[] args) throws Exception {
    SimpleDateFormat sdf = new SimpleDateFormat("H:m:s:S");
SimpleTimeZone tz = new SimpleTimeZone(0,"ID");
sdf.setTimeZone(tz) ;
Date d = new Date(0L );
System.out.println( sdf.format(d));
}

问题答案:

该大纪元定义为00:00:00
1970-1-1上UTC。由于CET 是UTC
+ 1,所以相当于您的时间是1AM。

如果查看Date(long)构造函数,您会看到它期望该值是自纪元UTC以来的毫秒数:

分配一个Date对象,并将其初始化为表示自标准基准时间(即“纪元”)以来的指定毫秒数,即标准时间1970年1月1日,格林尼治标准时间00:00:00。

关于您要强制使用GMT而不是本地时区:简而言之,Date实例 始终
使用GMT。如果只想格式化输出字符串以使其使用GMT,则可以使用DateFormat类,尤其是其setTimeZone()方法。



 类似资料:
  • 我从这里和这里得到了不同的答案 我刚刚开始学习。在那篇博文中,道格说:“我想要的是expirationAtSeconds是以秒表示的过期时间。”。 我希望任务在设置时间后删除帖子。在我的iOS应用程序中,我创建了一个在特定时间过期的帖子: 它给我一个数据库值,比如: 在我的云函数中,我希望expiresAt日期是一个,以秒表示。我不确定是否应该使用expDate1、expDate2、expDate

  • 问题内容: 我有一个包含UNIX Epoch time的字符串,我需要将其转换为Java Date对象。 标记的行是我遇到麻烦的地方。我无法计算出SimpleDateFormat()的参数是什么,甚至无法使用SimpleDateFormat()。 问题答案: 怎么样: 编辑:根据rde6173的答案,并仔细查看问题中指定的输入,“ 1081157732”似乎是基于秒的纪元值,因此你想将parseL

  • 我试图解析一个字符串,下面的表单2010-10-12-18-43-55到当前时区自纪元以来的秒。这是我试过的 我。

  • 问题内容: 我有DATETIME格式的mysql列。 在纪元秒内有没有办法访问此专栏?如果没有,将日期时间格式转换为纪元秒的最佳方法是什么?哪种类型的字段最能捕捉到这一点? 问题答案: 使用MySQL的功能

  • 问题内容: 如何在Java中将纪元转换为? 给定的代码期望 长 值,因此将抛出上面给出的值。 问题答案: 罗勒·布尔克(BasilBourque)的答案很不错。从小数部分中取出纳秒到一个纳秒整数可能会导致一个或两个陷阱。我建议: 此打印 纳秒级不需要64位,因此我只是使用。 假设:我假设您的字符串包含一个浮点数,并且可以对其进行签名,例如,这意味着在纪元开始 前 一秒半。如果某一天的时间用科学计数

  • 问题内容: 我已经为此战斗了一段时间。我正在尝试将纪元转换为日期对象。时代以UTC发送给我。每当您经过一个纪元时,它就会假定它是本地纪元。我尝试创建一个UTC对象,然后使用它来将其调整为适当的纪元,但是似乎有用的唯一方法是字符串对我没有帮助。如果我将该字符串传递给新日期,则应该注意它是UTC,但不是。 我的下一个尝试是尝试获取本地当前时间段与UTC当前时间段之间的差异,但是我也无法做到这一点。 它