Java的Date类中是否有与DateTime.MinValue和DateTime.Today相当的函数?或者有没有一种实现类似功能的方法?
我意识到使用.NET datetime类非常方便,我还需要AddDays(),AddMonths()等类似的函数。
事实上,Java日期时间API的标准是joda-time。
使用它,您可以通过构造new DateTime()
来获取当前日期/时间。
同样地,如果没有它,您可以使用Calendar.getInstance()
或new Date()
来获得当前日期/时间。
MinValue
可以是Calendar.getInstance(0)
/ new Date(0)
。这将使用默认年表 - 即自1970年1月1日以来。由于MinValue
返回的是公元1年1月1日,您可以通过使用DateTime
的适当构造函数来简单地指定此日期。
旧的日期时间类(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。请参阅Tutorial。
使用Instant
,可在UTC以纳秒为分辨率获取当前时间线上的时刻。Instant now = Instant.now();
Instant
有三个常量:
EPOCH
– 1970-01-01T00:00:00Z
MIN
– -1000000000-01-01T00:00Z
MAX
– 1000000000-12-31T23:59:59.999999999Z
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
表示仅包含时间而不包含日期和时区。通常最好坚持使用Instant
和 OffsetDateTime
/ZonedDateTime
,因为Local…
类型不代表时间轴上的实际时刻(没有偏移或时区意味着它们是未定义的)。LocalDate localDate = LocalDate.now( zoneId );
LocalTime localTime = LocalTime.now( zoneId );
.NET DateTime (C#) | Joda DateTime (Java, deprecated) [See Note #2] | Java Date |
---|---|---|
DateTime.MinValue | new DateTime(Long.MIN_VALUE) | new Date(Long.MIN_VALUE) [查看注释#3] |
DateTime.Today | new DateTime().withTimeAtStartOfDay() | 混乱 [查看注释#4] |
DateTime.Now | new DateTime() | new Date() |
DateTime.MaxValue | new DateTime(Long.MAX_VALUE) | new Date(Long.MAX_VALUE) |
附加说明:
new Date(Long.MIN_VALUE)
的更多信息,请参见其他注意事项。意味着请注意,从Java SE 8开始,用户被要求迁移到java.time(JSR-310)——JDK的核心部分,取代了这个项目。
.NET DateTime (C#) | java.time (以前称为 Joda-Time) | Java Date |
---|---|---|
DateTime.MinValue | LocalDateTime.MIN | new Date(Long.MIN_VALUE) |
DateTime.Today | LocalDateTime.of(LocalDate.NOW, LocalTime.MIDNIGHT) | (不可用) |
DateTime.Now | LocalDateTime.now() | new Date() |
DateTime.UtcNow | LocalDateTime.now(ZoneOffset.UTC) | (不可用) |
DateTime.MaxValue | LocalDateTime.MAX | new Date(Long.MAX_VALUE) |
.NET的DateTime
包含:
这意味着java.time
的等效对象是LocalDateTime
。如果您想要一个还带有与UTC偏移量相关信息的日期时间对象:
DateTimeOffset
java.time
: ZonedDateTime
获取当前日期:
Calendar calendar = Calendar.getInstance(); SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
try {
System.out.println("Today: " + dateFormat.format(calendar.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html