Date date = new Date(0L);
它不应该给我一个零日期吗?像00/00/0000?给我 Wed Dec 31 19:00:00 EST 1969
答案 0 :(得分:26)
根据javadocs,Date
上的此构造函数使用与基线时间的偏移量:
分配Date对象和 初始化它来代表 指定的毫秒数 标准基准时间称为“ 时代“,即1970年1月1日, 00:00:00 GMT。
据推测,你是在EST,因此结果。
顺便说一句,我不希望你注意到的结果是由任何可以想象的Date
操纵产生的,因为那甚至不是一个有效的日期(月和日= 0)。
答案 1 :(得分:5)
来自Java API:
日期(长日期):分配一个Date对象并对其进行初始化,以表示自标准基准时间(" epoch",即1970年1月1日00:00)以来指定的毫秒数: 00 GMT。
请参阅:http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html
答案 2 :(得分:1)
自纪元以来的时间是毫秒。
这个时代是格林威治标准时间1970年1月1日。
答案 3 :(得分:1)
因为该构造函数创建对象所以将其初始化为表示自标准基准时间(称为“纪元”)以来的指定毫秒数,即1970年1月1日00:00:00 GMT。
答案 4 :(得分:0)
Java日期和日期的大多数计算机实现都以毫秒为单位存储,从所谓的纪元开始。那是1970年1月1日.Java日期表示为自纪元以来的毫秒数。因为纪元是时代本身,所以0毫秒。这就是你获得这个价值的原因。
答案 5 :(得分:0)
1970年的第一个UTC时刻:
Instant.EPOCH.toString()
1970-01-01T00:00:00Z
与纽约地区相同的那一刻:
Instant.EPOCH.atZone( ZoneId.of( "America/New_York" ) ).toString()
1969-12-31T19:00-05:00 [美国/纽约]
其他答案是正确的:纪元参考是UTC的1970年的第一个时刻,而你的时区是后面 UTC的5个小时。这是更新的信息。
现代方法使用 java.time 类来取代麻烦的旧遗留日期时间类。
Instant
类代表UTC中时间轴上的一个时刻,分辨率为nanoseconds(小数部分最多九(9)位)。
1970-01-01T00:00:00Z的纪元参考被定义为常数Instant.EPOCH
。
Instant.EPOCH.toString()
1970-01-01T00:00:00Z
要在另一个时区看到同一时刻,请应用ZoneId
获取ZonedDateTime
。您可以将其视为:“ZonedDateTime = Instant + ZoneId”。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/New_York" ) ;
ZonedDateTime zdt = Instant.EPOCH.atZone( z ) ;
zdt.toString():1969-12-31T19:00-05:00 [America / New_York]
结果是在前一年的最后一天提前五个小时的时间。这个ZonedDateTime
表示相同的时刻,即时间轴上的同一点,但是不同的挂钟时间。
在印度的同一时刻,提前的时间是,而不是在之后。
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = Instant.EPOCH.atZone( z ) ;
System.out.println(zdt );
zdt.toString():1970-01-01T05:30 + 05:30 [亚洲/加尔各答]
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
如果JDBC driver符合JDBC 4.2或更高版本,您可以直接与数据库交换 java.time 对象。不需要字符串或java.sql。* classes。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。