Den*_*kiy 69
不要忘记Date构造函数很乐意接受负值.
Date date = new Date(Long.MIN_VALUE);
Run Code Online (Sandbox Code Playgroud)
回报
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));
Run Code Online (Sandbox Code Playgroud)
mik*_*kej 42
如果您正在谈论java.util.Date作为时间戳,您可以这样做
Date d = new Date(0L) 你会看到这代表通用汽车1970年1月1日01:00:00
正如tulskiy指出的那样,可以将负值传递给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));
Run Code Online (Sandbox Code Playgroud)
显示:太阳,12月2日292269055 BC 16:47:04 +0000
Bas*_*que 14
其他答案可能是正确的,但使用过时的类.
旧的日期时间类(java.util.Date/.Calendar等)已被Java 8及更高版本中内置的java.time框架取代.
的java.time类由启发约达时间,由下式定义JSR 310,由ThreeTen-EXTRA项目扩展,由后移植到Java 6和7 ThreeTen-反向移植项目,并适合于在到Android ThreeTenABP项目.请参阅教程.
有关UTC时间轴上的分辨率为纳秒的情况,请使用Instant.给定与UTC的偏移量,使用OffsetDateTime.对于时区(偏移+异常规则),请使用ZonedDateTime,但就其性质而言,没有明确的最小值,也没有ZoneId.对于没有时间且没有时区的仅限日期的值,请使用LocalDate.对于没有日期且没有时区的仅限时间的值,请使用LocalTime.对于没有时区的日期时间,请使用LocalDateTime.
Instant.MIN = -1000000000-01-01T00:00ZOffsetDateTime.MIN = -999999999-01-01T00:00:00+18:00LocalDate.MIN = -999999999-01-01LocalTime.MIN = 00:00LocalDateTime.MIN = -999999999-01-01T00:00:00Year.MIN_VALUE = -999,999,999ZoneOffset.MIN= -18:00(但-12:00在实践中)注意:要小心使用这些值作为某种标志或特殊含义.许多其他软件库和数据库可能不支持这些极端值.
对于一个标志或特殊意义,如非空"没有价值",我建议选择一个任意的时刻,但避免在时间上向后或向前进入这样的极端.也许是Unix纪元参考日期,1970年的第一个时刻,UTC,1970-01-01T00:00:00Z.在Java中定义为常量:Instant.EPOCH
它与Calendar类相同.
试试这个:
Date d = new Date( Long.MIN_VALUE );
System.out.println( d );
Run Code Online (Sandbox Code Playgroud)
你会看到的:
Sun Dec 02 16:47:04 GMT 292269055
Run Code Online (Sandbox Code Playgroud)
但默认日期格式不包括时代 - 这是该日期的BCE.