Java 中的最小日期
Posted
技术标签:
【中文标题】Java 中的最小日期【英文标题】:Minimum date in Java 【发布时间】:2011-04-19 18:57:22 【问题描述】:值是多少?
【问题讨论】:
最小日期是什么意思? 看到这个帖子***.com/questions/2393016/… Java: What/where are the maximum and minimum values of a GregorianCalendar?的可能重复 @qrtt1 当然是大爆炸。除非你恰好擅长数学和形而上学。 【参考方案1】:不要忘记 Date 构造函数很乐意接受负值。
Date date = new Date(Long.MIN_VALUE);
返回
12 月 2 日星期日 22:47:04 BDT 292269055
我猜那是关于大爆炸恐龙的时代:)
编辑
正如martin Clayton 回答的那样,您可以使用 Calendar 类来检查时代。这将输出代表 BCE 的 0:
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(Long.MIN_VALUE));
System.out.println(calendar.get(Calendar.ERA));
【讨论】:
但这似乎是未来的日期(292269055 年),而不是过去。似乎该参数被解释为正值。 @Grodriguez - 那一年是什么时代? ;-) @tulskiy,不多。因此使用 JODA。 大约是公元前 3 亿年,不是大爆炸;) @Adam:是的,现在是恐龙时代,我只是懒得编辑答案:)【参考方案2】:如果您将java.util.Date
作为时间戳,您可以这样做
Date d = new Date(0L)
你会看到这代表 Thu Jan 01 01:00:00 GMT 1970
正如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));
显示:Sun, 2 Dec 292269055 BC 16:47:04 +0000
【讨论】:
【参考方案3】:其他答案可能是正确的,但使用过时的类。
java.time
旧的日期时间类(java.util.Date/.Calendar 等)已被 Java 8 及更高版本中内置的 java.time 框架所取代。
java.time 类的灵感来自 Joda-Time,由 JSR 310 定义,由 ThreeTen-Extra 项目扩展,由 ThreeTen-Backport 项目向后移植到 Java 6 和 7,并在ThreeTenABP 项目。见Tutorial。
在UTC 的时间线上,分辨率为nanoseconds,请使用Instant
。给定offset-from-UTC,使用OffsetDateTime
。对于time zone(偏移量+异常规则),使用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
LocalTime.MIN
= 00:00
LocalDateTime.MIN
= -999999999-01-01T00:00:00
Year.MIN_VALUE
= -999,999,999
ZoneOffset.MIN
= -18:00
(但实际上是-12:00
)
警告:小心将这些值用作某种标志或特殊含义。许多其他软件库和数据库可能不支持这些极端值。
对于标志或特殊含义,例如非空“无可用值”,我建议选择任意时刻,但避免在时间上向后或向前走极端。也许Unix epoch reference date,1970 年 UTC 的第一刻,1970-01-01T00:00:00Z。在 Java 中定义为常量:Instant.EPOCH
【讨论】:
【参考方案4】:这与日历类相同。
试试这个:
Date d = new Date( Long.MIN_VALUE );
System.out.println( d );
你会看到:
Sun Dec 02 16:47:04 GMT 292269055
但默认日期格式不包括时代 - 该日期是 BCE。
【讨论】:
【参考方案5】:LocalDateTime MIN 定义支持的最小 LocalDateTime,'-999999999-01-01T00:00:00'。 这是最小日期开始时的本地日期时间午夜。
public static final LocalDateTime MIN;这是 MIN 语法;
import java.time.LocalDateTime;
public class Main
public static void main(String[] args)
LocalDateTime a = LocalDateTime.MIN;
System.out.println(a);
【讨论】:
【参考方案6】:由于Date
被标记为已弃用,我认为应该有另一种方法来解决这个问题,所以我查看了一些方法,我发现这边
你也可以使用 Long.MIN_VALUE,在我写这篇文章的时候,我没有搜索它,甚至/所以我不记得它。
【讨论】:
不正确:java.util.Date
类不被弃用(但应该被弃用)。它的一些方法已被弃用,但不是整个类。此外,这个答案对我来说没有太大价值。
我只是再次检查,你是对的。它的一些构造函数和方法是,但不是全部以上是关于Java 中的最小日期的主要内容,如果未能解决你的问题,请参考以下文章