Java 相当于 .NET DateTime.MinValue,DateTime.Todayjava.time

2022-09-02 10:15:16

在 Java Date 类中是否有与 DateTime.MinValue 等效的 Java 和 DateTime.Today?还是实现类似目标的方法?

我已经意识到你对.NET datetime类的宠坏了,我还需要相当于AddDays(),AddMonths()的类。


答案 1

事实上的Java datetime API是joda-time

有了它,您只需构建即可获得当前日期/时间。new DateTime()

同样,如果没有它,您可以使用 或 获取当前日期/时间。Calendar.getInstance()new Date()

MinValue可以是 / 。这将使用默认的时间顺序 - 即自1970年1月1日起。由于返回 Januar 1st,即第 1 年,因此只需使用 适当的构造函数指定此日期即可。Calendar.getInstance(0)new Date(0)MinValueDateTime


答案 2

其他答案可能是正确的,但使用过时的类。

java.time

旧的日期时间类 (java.util.Date/.日历等)被Joda-Time取代,而Joda-Time又被Java 8及更高版本中内置的java.time框架所取代。java.time类的灵感来自JSR 310定义的Joda-Time,由ThreeTen-Extra项目扩展,由ThreeTen-Backport项目向后移植到Java 6和7,并在ThreeTenABP项目中适应Android。请参阅教程

若要以 UTC 格式获取时间轴上的当前时刻,分辨率为纳秒,请使用“即时”。

Instant now = Instant.now();

Instant有三个常量:

  • 时代1970-01-01T00:00:00Z
  • 最小值-1000000000-01-01T00:00Z
  • 最大1000000000-12-31T23:59:59.999999999Z

若要获取偏移量与 UTC 偏移量的当前时刻,请应用 ZoneOffset 以获取 OffsetDateTime

OffsetDateTime now = OffsetDateTime.now( ZoneOffset.of( "-04:00" ) );

如果已知,最好应用完整时区(偏移量加上异常情况的规则,如夏令时)。应用 ZoneId 以获取 ZonedDateTime

ZonedDateTime now = ZonedDateTime.now( ZoneId.of( "America/Montreal" ) );

您可以执行算术运算。

ZonedDateTime dayLater = now.plusDays( 1 );
ZonedDateTime monthLater = now.plusMonths( 1 );

您可以获得一天中的第一刻。

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime tomorrowStart = now.toLocalDate().atStartOfDay( zoneId );  // Usually time-of-day of `00:00:00.0` but not always.

如果只需要一个没有时间、没有时区的日期,请使用 LocalDate。同样,LocalTime 表示没有日期和时区的仅限时间。通常最好坚持使用和/,因为这些类型不代表时间轴上的实际时刻(没有偏移量或时区意味着它们是未定义的)。InstantOffsetDateTimeZonedDateTimeLocal…

LocalDate localDate = LocalDate.now( zoneId );
LocalTime localTime = LocalTime.now( zoneId );