Java中的最短date
Java中的最短date值是多less?
不要忘记Date构造函数愉快地接受负值。
Date date = new Date(Long.MIN_VALUE);
回报
Sun Dec 02 22:47:04 BDT 292269055
我想这是大爆炸恐龙的时间:)
编辑
正如马丁·克莱顿回答的那样,你可以使用日历课来检查时代。 这将输出0代表BCE:
Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date(Long.MIN_VALUE)); System.out.println(calendar.get(Calendar.ERA));
如果你正在谈论java.util.Date
作为时间戳,你可以这样做
Date d = new Date(0L)
,你会看到这个代表星期四01 01:00:00 GMT 1970
正如tulskiy指出的那样,可以将一个负值传递给Date构造函数。 如果我们这样做,并使用包括我们可以看到的时代的date格式:
Date d = new Date(Long.MIN_VALUE); DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy G HH:mm:ss Z"); System.out.println(df.format(d));
显示:太阳,12月29日292269055 BC 16:47:04 +0000
其他答案可能是正确的,但使用过时的类。
java.time
旧的date – 时间类(java.util.Date/.Calendar等)已被Java 8及更高版本中内置的java.time框架所取代。
java.time类的灵感来自JSR 310定义的Joda-Time ,由ThreeTen-Extra项目扩展,由ThreeTen-Backport项目移植到Java 6和7,并在ThreeTenABP项目中适用于Android。 参见教程 。
在UTC时间线上,分辨率为纳秒 ,请使用Instant
。 给定与UTC的偏移量 ,使用OffsetDateTime
。 对于时区 (偏移量+exception规则),使用ZonedDateTime
,但由于其本质没有定义的最小值,也没有ZoneId
。 对于没有时间和不带时区的仅限date的值,请使用LocalDate
。 对于没有date且没有时区的仅限于时间的值,请使用LocalTime
。 对于没有时区的date时间,使用LocalDateTime
。
-
Instant.MIN
=-1000000000-01-01T00:00Z
-
OffsetDateTime.MIN
=-999999999-01-01T00:00:00+18:00
-
LocalDate.MIN
=-999999999-01-01
-
LocalTime.MIN
=00:00
-
LocalDateTime.MIN
=-999999999-01-01T00:00:00
-
Year.MIN_VALUE
=-999,999,999
-
ZoneOffset.MIN
=-18:00
(实际上是-12:00
)
警告:请谨慎使用这些值作为某种标志或特殊含义。 许多其他软件库和数据库可能不支持这些极端值。
对于一个标志或特殊的含义,比如一个非空的“没有价值的可用”,我build议select一个随意的时刻,但是避免到达这样的极端时间。 也许是Unix时代的参考date ,1970年1月1 日 ,1970:00:00Z。 在Java中定义为常量: Instant.EPOCH
这与Calendar类相同。
尝试这个:
Date d = new Date( Long.MIN_VALUE ); System.out.println( d );
你会看到的:
Sun Dec 02 16:47:04 GMT 292269055
但默认的date格式不包括时代 – 这是BCE在这个date。
由于Date
被标记为弃用 ,我认为应该有另一种方法来解决这个问题,所以我看了一些方法,我发现这样
你可以使用Long.MIN_VALUE,当时我写这个,我没有search它,甚至/所以我不记得它。