Java中的最小日期值是多少?
vbkedwbf1#
不要忘记Date构造函数很乐意接受负值。
Date date = new Date(Long.MIN_VALUE);
退货12月2日星期日22:47:04英国夏令时292269055我猜那大概是大爆炸恐龙的时代:)
正如 * martin clayton * 所回答的,你可以使用Calendar类来检查年代,这将输出0,代表BCE:
Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date(Long.MIN_VALUE)); System.out.println(calendar.get(Calendar.ERA));
nkcskrwz2#
如果您将java.util.Date作为时间戳,则可以执行此操作Date d = new Date(0L),您将看到它表示1970年1月1日星期四01:00:00 GMT正如tulskiy所指出的,可以向Date构造函数传递一个负值,如果我们这样做并使用包含纪元的日期格式,我们可以看到:
java.util.Date
Date d = new Date(0L)
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));
显示时间:公元前292269055年12月2日星期日16:47:04 +0000
1cosmwyk3#
其他答案可能是正确的,但使用过时的类。
旧的日期-时间类(java.util.Date/. Calendar等)已经被内置到Java8和更高版本中的java.time框架所取代。java. time类的灵感来自Joda-Time,定义于JSR 310,扩展于ThreeTen-Extra项目,后移植于Java 6和7,并在ThreeTenABP项目中适应Android。对于分辨率为nanoseconds的UTC中的时间线,使用Instant。给定offset-from-UTC,使用OffsetDateTime。(偏移量+异常规则),使用ZonedDateTime,但其本质上没有定义最小值,ZoneId也没有。对于没有时间和时区的仅日期值,使用LocalDate。对于不带日期和时区的仅时间值,使用LocalTime。对于不带时区的日期-时间,使用LocalDateTime。
Instant
OffsetDateTime
ZonedDateTime
ZoneId
LocalDate
LocalTime
LocalDateTime
Instant.MIN
-1000000000-01-01T00:00Z
OffsetDateTime.MIN
-999999999-01-01T00:00:00+18:00
LocalDate.MIN
-999999999-01-01
LocalDateTime.MIN
-999999999-01-01T00:00:00
Year.MIN_VALUE
-999,999,999
ZoneOffset.MIN
-18:00
-12:00
对于一个标志或特殊含义,如非空的"no value available",我建议选择一个任意的时刻,但要避免走极端,在时间上向前或向后到达。例如Unix epoch reference date,UTC中1970年的第一个时刻,1970 - 01 - 01T00:00:00Z。在Java中定义为常量:Instant.EPOCH
6gpjuf904#
这与Calendar类相同。试试这个:
Date d = new Date( Long.MIN_VALUE ); System.out.println( d );
您将看到:
Sun Dec 02 16:47:04 GMT 292269055
但是默认的日期格式不包括纪元--这个日期的纪元是BCE。
ktca8awb5#
LocalDateTime MIN定义支持的最小LocalDateTime“-99999999 -01- 01 T00:00:00”。这是最小日期开始时的午夜本地日期时间。公共静态最终LocalDateTime MIN;这是MIN语法;
import java.time.LocalDateTime; public class Main { public static void main(String[] args) { LocalDateTime a = LocalDateTime.MIN; System.out.println(a); } }
4xrmg8kj6#
由于Date被标记为Deprecated,我认为应该有另一种方法来解决这个问题,因此我查看了一些方法,并找到了这种方法
Date
你也可以使用Long.MIN_VALUE,在我写这篇文章的时候,我还没有搜索过它,甚至/所以我不记得它。x1c 0d1x
在评论中提到,不是整个类都被弃用了,而且仍然可用,但是它的一些功能被弃用了,所以你可以重新考虑其中的一些...
6条答案
按热度按时间vbkedwbf1#
不要忘记Date构造函数很乐意接受负值。
退货
12月2日星期日22:47:04英国夏令时292269055
我猜那大概是大爆炸恐龙的时代:)
正如 * martin clayton * 所回答的,你可以使用Calendar类来检查年代,这将输出0,代表BCE:
nkcskrwz2#
如果您将
java.util.Date
作为时间戳,则可以执行此操作Date d = new Date(0L)
,您将看到它表示1970年1月1日星期四01:00:00 GMT正如tulskiy所指出的,可以向Date构造函数传递一个负值,如果我们这样做并使用包含纪元的日期格式,我们可以看到:
显示时间:公元前292269055年12月2日星期日16:47:04 +0000
1cosmwyk3#
其他答案可能是正确的,但使用过时的类。
java.时间
旧的日期-时间类(java.util.Date/. Calendar等)已经被内置到Java8和更高版本中的java.time框架所取代。
java. time类的灵感来自Joda-Time,定义于JSR 310,扩展于ThreeTen-Extra项目,后移植于Java 6和7,并在ThreeTenABP项目中适应Android。
对于分辨率为nanoseconds的UTC中的时间线,使用
Instant
。给定offset-from-UTC,使用OffsetDateTime
。(偏移量+异常规则),使用ZonedDateTime
,但其本质上没有定义最小值,ZoneId
也没有。对于没有时间和时区的仅日期值,使用LocalDate
。对于不带日期和时区的仅时间值,使用LocalTime
。对于不带时区的日期-时间,使用LocalDateTime
。Instant.MIN
=-1000000000-01-01T00:00Z
OffsetDateTime.MIN
=-999999999-01-01T00:00:00+18:00
LocalDate.MIN
=-999999999-01-01
LocalDateTime.MIN
=-999999999-01-01T00:00:00
Year.MIN_VALUE
=-999,999,999
ZoneOffset.MIN
=-18:00
(但实际上是-12:00
)对于一个标志或特殊含义,如非空的"no value available",我建议选择一个任意的时刻,但要避免走极端,在时间上向前或向后到达。例如Unix epoch reference date,UTC中1970年的第一个时刻,1970 - 01 - 01T00:00:00Z。在Java中定义为常量:Instant.EPOCH
6gpjuf904#
这与Calendar类相同。
试试这个:
您将看到:
但是默认的日期格式不包括纪元--这个日期的纪元是BCE。
ktca8awb5#
LocalDateTime MIN定义支持的最小LocalDateTime“-99999999 -01- 01 T00:00:00”。这是最小日期开始时的午夜本地日期时间。
公共静态最终LocalDateTime MIN;这是MIN语法;
4xrmg8kj6#
由于
Date
被标记为Deprecated,我认为应该有另一种方法来解决这个问题,因此我查看了一些方法,并找到了这种方法你也可以使用Long.MIN_VALUE,在我写这篇文章的时候,我还没有搜索过它,甚至/所以我不记得它。x1c 0d1x
编辑
在评论中提到,不是整个类都被弃用了,而且仍然可用,但是它的一些功能被弃用了,所以你可以重新考虑其中的一些...