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) | | | | | +--------------------+----------------------------------------+----------------------------+
补充笔记:
- 处理日期和时间是混乱的。 此表旨在成为代码迁移的起点。 比较比较概念,而不是确切的值(例如,.NET的最小日期/时间与Java的值不同)
- Joda DateTime是Java的首选日期/时间库。
- 请参阅Java中有关
new Date(Long.MIN_VALUE)
其他说明 - 使用Java的Date开始新的一天更加复杂 – 请参阅此处 。
- .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
有三个常量:
-
EPOCH
–1970-01-01T00:00:00Z
-
MIN
–-1000000000-01-01T00:00Z
-
MAX
–1000000000-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
仅限时间,没有日期且没有时区。 通常最好坚持使用Instant
和OffsetDateTime
/ 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