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 中的最小日期的主要内容,如果未能解决你的问题,请参考以下文章

DB/Rest 支持 Java 日历/日期最小值

java中相同的日期获得最大和最小的时间

BigQuery 中的最小值(日期)

在 Excel 中查找具有多种数据类型的行中的最小日期

带有ng-repeat的表中的最小和最大日期jquery datepicker

在一个范围内选择最大和最小日期时间