Equivalent of C#'s DateTime.Now in Java?
如何在Java中获取当前日期?
在C#中它是
只需构造一个没有任何参数的新
用零参数构造函数的Javadocs的话来说:
Allocates a Date object and initializes it so that it represents the time at which it was allocated, measured to the nearest millisecond.
确保你使用
许多人认为Java Date和Calendar类的设计很差。您应该看看Joda Time,这是一个通常用来代替Java内置日期库的库。
Joda Time中的
1 | DateTime dt = new DateTime(); |
更新
正如评论中所述,最新版本的Joda Time有一个
1 | DateTime dt = DateTime.now(); |
TL;博士
1 | Instant.now() |
java.time
java.util.Date类已经被Java 8及更高版本中的新java.time包(教程)所取代。旧的java.util.Date/.Calendar类是出了名的麻烦,令人困惑和有缺陷的。避免他们。
<5233>
获取java.time中的当前时刻。
1 | ZonedDateTime now = ZonedDateTime.now(); |
A
- 日期。
- 时间,分辨率只有一秒到几纳秒。
- 时区。
如果未指定时区,则会以静默方式分配JVM的当前默认时区。最好指定所需/预期的时区,而不是默认依赖。
1 2 | ZoneId z = ZoneId.of("Pacific/Auckland" ); ZonedDateTime zdt = ZonedDateTime.now( z ); |
世界标准时间
通常更好地养成在UTC时区完成后端工作(业务逻辑,数据库,存储,数据交换)的习惯。上面的代码隐式依赖于JVM的当前默认时区。
1 | Instant instant = Instant.now(); |
当您需要更灵活的格式化时,转换为
1 | OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ); |
时区
您可以轻松调整到另一个时区以呈现给用户。使用正确的时区名称,不要使用3-4个字母代码,例如
1 2 | ZoneId z = ZoneId.of("America/Montreal" ); ZonedDateTime nowMontreal = instant.atZone( z ); |
生成该日期时间值的字符串表示,已本地化。
1 2 3 4 |
或者,要保持UTC,请使用
ZonedDateTime =Instant +ZoneId
您可以从
1 | Instant instantNow = zdt.toInstant(); |
你可以从一个瞬发开始。此处无需指定时区,因为
1 | Instant now = Instant.now(); |
我更喜欢使用Calendar对象。
1 |
我觉得使用它要容易得多。您还可以从日历中获取Date对象。
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
在Java 8中它是:
1 | ZonedDateTime dateTime = ZonedDateTime.now(); |
请注意,Date对象是可变的,如果你想做任何复杂的事情,请使用jodatime。
1 2 3 | import org.joda.time.DateTime; DateTime now = DateTime.now(); |
如果您创建一个新的Date对象,默认情况下它将设置为当前时间:
Java总是得不到日期和时间用例的支持。例如,现有的类(例如
1 2 |
根据文件:
The method
now() returns the current date-time using the system
clock and default time-zone, not null. It obtains the current
date-time from the system clock in the default time-zone. This will
query the system clock in the default time-zone to obtain the current
date-time. Using this method will prevent the ability to use an
alternate clock for testing because the clock is hard-coded.