Answers:
只需构造一个Date
没有任何参数的新对象即可;这会将当前日期和时间分配给新对象。
import java.util.Date;
Date d = new Date();
分配一个Date对象并对其进行初始化,以便它表示分配它的时间(以最近的毫秒为单位)。
确保您使用的java.util.Date
不是java.sql.Date
-后者没有零参数构造函数,并且语义完全不同,它们是完全不同的对话的主题。:)
许多人认为Java Date和Calendar类的设计不佳。您应该看一下Joda Time,这是一个常用于代替Java内置日期库的库。
DateTime.Now
Joda Time中的等效时间是:
DateTime dt = new DateTime();
更新资料
如评论中所述,最新版本的Joda Time具有一种DateTime.now()
方法,因此:
DateTime dt = DateTime.now();
Instant.now()
Java 8及更高版本中的新java.time包(Tutorial)已使java.util.Date类过时。众所周知,旧的java.util.Date/.Calendar类麻烦,混乱且有缺陷。避免他们。
ZonedDateTime
在java.time中获取当前时刻。
ZonedDateTime now = ZonedDateTime.now();
一个ZonedDateTime
封装:
如果未指定时区,则将静默分配JVM的当前默认时区。比隐式依赖默认值更好地指定所需/预期的时区。
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
通常,最好养成在UTC时区进行后端工作(业务逻辑,数据库,存储,数据交换)的习惯。上面的代码隐式依赖JVM的当前默认时区。
本Instant
类代表在UTC时间线与纳秒的分辨率的时刻。
Instant instant = Instant.now();
该Instant
班是java.time一个基本构建块级和可在代码中经常使用。
如果您在格式化方面需要更大的灵活性,请转换为OffsetDateTime
。指定一个ZoneOffset
对象。对于UTC,请使用UTC的方便常量。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
您可以轻松地调整到另一个时区,以呈现给用户。请使用正确的时区名称,请勿使用3-4个字母代码,例如EST
或IST
。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
生成该日期时间值的本地化String表示形式。
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
或者,要使用UTC,请使用Instant
。一个Instant
对象表示在时间轴上一会儿,以纳秒的分辨率,总是在UTC。这为区域日期时间以及时区分配提供了基础。您可以通过以下方式在概念上进行思考:
您可以提取Instant
从ZonedDateTime
。
Instant instantNow = zdt.toInstant();
您可以从即时开始。无需像Instant
在UTC中一样在此处指定时区。
Instant now = Instant.now();
我更喜欢使用Calendar对象。
Calendar now = GregorianCalendar.getInstance()
我发现使用起来容易得多。您还可以从日历中获取Date对象。
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
在Java 8中,它是:
ZonedDateTime dateTime = ZonedDateTime.now();
Java始终没有足够的日期和时间用例支持。例如,现有的类(例如java.util.Date
和SimpleDateFormatter
)不是线程安全的,这可能会导致并发问题。API中也存在某些缺陷。例如,年份java.util.Date
从1900开始,月份从1开始,天从0开始,这不是很直观。这些问题导致了第三方日期和时间库的普及,例如Joda-Time
。为了解决新的日期和时间,为Java SE 8设计了API。
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
根据文档:
该方法
now()
使用系统时钟和默认时区返回当前日期时间,而不是null。它从默认时区的系统时钟获取当前日期时间。这将查询默认时区中的系统时钟,以获取当前日期时间。使用此方法将无法使用备用时钟进行测试,因为该时钟是硬编码的。