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它,甚至/所以我不记得它。 在这里输入图像说明