Java相当于.NET DateTime.MinValue,DateTime.Today

Java Date类中是否存在Java等效的DateTime.MinValue和DateTime.Today? 还是一种实现类似的方式?

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

事实上的Java datetime API是joda-time 。

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

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

MinValue可以是Calendar.getInstance(0) / new Date(0) 。 这将使用默认的年表 – 即自1970年1月1日以来。由于MinValue返回1月1日Januar,您可以使用DateTime的相应构造函数简单地指定此日期。

.NET和Java中日期/时间function的比较

 +--------------------+----------------------------------------+----------------------------+ | .NET DateTime (C#) | Joda DateTime (Java) [See Note #2] | Java Date | +--------------------+----------------------------------------+----------------------------+ | | | | | DateTime.MinValue | new DateTime(Long.MIN_VALUE) | new Date(Long.MIN_VALUE) | | | | [See Note #3] | | | | | | DateTime.Today | new DateTime().withTimeAtStartOfDay() | Messy [See Note #4] | | | | | | DateTime.Now | new DateTime() | new Date() | | | | | | DateTime.MaxValue | new DateTime(Long.MAX_VALUE) | new Date(Long.MAX_VALUE) | | | | | +--------------------+----------------------------------------+----------------------------+ 

补充笔记:

  1. 处理日期和时间是混乱的。 此表旨在成为代码迁移的起点。 比较比较概念,而不是确切的值(例如,.NET的最小日期/时间与Java的值不同)
  2. Joda DateTime是Java的首选日期/时间库。
  3. 请参阅Java中有关new Date(Long.MIN_VALUE) 其他说明
  4. 使用Java的Date开始新的一天更加复杂 – 请参阅此处 。
  5. .NET DateTimes默认为本地日期/时间,而在Java中,它们默认为UTC。 在处理日期和时间时 ,请务必考虑时区的任何影响 。

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

java.time

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

要以UTC的分辨率获得UTC时间轴上的当前时刻,请使用Instant

 Instant now = Instant.now(); 

Instant有三个常量:

  • EPOCH1970-01-01T00:00:00Z
  • MIN-1000000000-01-01T00:00Z
  • MAX1000000000-12-31T23:59:59.999999999Z

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

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

如果已知,最好应用全时区 (偏移加上夏令时等exception的规则)。 应用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仅限时间,没有日期且没有时区。 通常最好坚持使用InstantOffsetDateTime / ZonedDateTime作为Local…类型不代表时间轴上的实际时刻(没有偏移或时区意味着它们未定义)。

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

现在应该使用Calendar对象完成大多数日期操作。

http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html

获取当前日期:

日历日历= Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat(“dd / MM / yyyy”);

  try { System.out.println("Today: " + dateFormat.format(calendar.getTime())); } catch (Exception e) { e.printStackTrace(); } 

Theres日历http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

和日期http://download.oracle.com/javase/1.4.2/docs/api/java/util/Date.html

Theres还简单格式化格式。 http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html