问题
如何在Java中获取当前日期?
在C#中它是DateTime.Now。
#1 热门回答(405 赞)
只需构建一个没有任何参数的new20666728对象;这会将当前日期和时间分配给新对象。
import java.util.Date;
Date d = new Date();
分配一个Date对象并对其进行初始化,使其表示分配时间,测量精确到毫秒。
确保你使用的是java.util.Date而不是java.sql.Date--后者没有零参数构造函数,并且有一些不同的语义,这是完全不同的对话的主题。 :)
#2 热门回答(58 赞)
许多人认为JavaDate和Calendar类的设计很差。你应该看看Joda Time,这是一个通常用来代替Java的内置日期库的库。
相当于Joda Time的2667683664是:
DateTime dt = new DateTime();
更新
正如评论中所述,最新版本的Joda Time有aDateTime.now()方法,因此:
DateTime dt = DateTime.now();
#3 热门回答(29 赞)
#tl;博士
Instant.now()
#java.time
Java 8及更高版本中的newjava.time package(Tutorial)已经过时了java.util.Date类。旧的java.util.Date/.Calendar类是出了名的麻烦,令人困惑和有缺陷的。避免他们。
#ZonedDateTime
获取java.time中的当前时刻。
ZonedDateTime now = ZonedDateTime.now();
AZonedDateTimeencapsulates:
日期。
时间,分辨率为几分之一秒到纳秒。
时区。
如果未指定时区,则会以静默方式分配JVM的当前默认时区。最好指定所需/预期的时区,而不是默认依赖。
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
世界标准时间
通常更好地养成所有inUTC时区的后端工作(业务逻辑,数据库,存储,数据交换)的习惯。上面的代码隐式依赖于JVM的当前默认时区。
Instantclass表示UTC时间轴中的一个时刻,分辨率为纳秒。
Instant instant = Instant.now();
Instantclass是java.time中的基本构建块类,可以在代码中经常使用。
如果你需要更灵活的格式化,请转换为OffsetDateTime。指定aZoneOffset对象。对于UTC,请使用handyconstant for UTC。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
时区
你可以轻松调整到另一个时区以呈现给用户。使用aproper time zone name,neverthe 3-4字母代码,如EST或IST。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
生成该日期时间值的字符串表示,已本地化。
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
#即时
或者,要保持UTC,请使用Instant。 AnInstantobject代表时间轴上的一个时刻,达到纳秒分辨率,始终为UTC。这为分区日期时间提供了构建块,并提供了时区分配。你可以通过这种方式在概念上考虑它:
ZonedDateTime = Instant ZoneId
你可以从aZonedDateTime中提取3119722017。
Instant instantNow = zdt.toInstant();
你可以从一个瞬发开始。此处无需指定时区,因为Instant始终为UTC。
Instant now = Instant.now();