如何在Java中获取当前日期?
在C#中,它是DateTime.Now
。
答案 0 :(得分:411)
只需构造一个没有任何参数的新Date
对象;这会将当前日期和时间分配给新对象。
import java.util.Date;
Date d = new Date();
the Javadocs代表the zero-argument constructor:
分配一个Date对象,然后对其进行初始化,使其表示分配的时间,测量精确到毫秒。
确保您使用的是java.util.Date
而不是java.sql.Date
- 后者没有零参数构造函数,并且有一些不同的语义,这是完全不同的对话的主题。 :)
答案 1 :(得分:58)
许多人认为Java Date和Calendar类的设计很差。您应该查看Joda Time,这是一个通常用来代替Java内置日期库的库。
Joda Time中的DateTime.Now
相当于:
DateTime dt = new DateTime();
<强>更新强>
如评论中所述,Joda Time的最新版本采用DateTime.now()
方法,因此:
DateTime dt = DateTime.now();
答案 2 :(得分:33)
Instant.now()
java.util.Date类已经被Java 8及更高版本中的新java.time package(Tutorial)所取代。旧的java.util.Date/.Calendar类是出了名的麻烦,令人困惑和有缺陷的。避免它们。
ZonedDateTime
获取java.time中的当前时刻。
ZonedDateTime now = ZonedDateTime.now();
A 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,请使用方便的constant for UTC。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
您可以轻松调整到另一个时区以呈现给用户。使用proper time zone name,从不 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 );
Instant
或者,要保持UTC,请使用Instant
。 Instant
对象表示时间轴上的时刻,以纳秒分辨率表示,始终为UTC。这为分区日期时间提供了构建块,并提供了时区分配。你可以用这种方式从概念上考虑它:
您可以从Instant
中提取ZonedDateTime
。
Instant instantNow = zdt.toInstant();
你可以从一个瞬发开始。此处无需指定时区,因为Instant
始终为UTC。
Instant now = Instant.now();
答案 3 :(得分:16)
我更喜欢使用Calendar对象。
Calendar now = GregorianCalendar.getInstance()
我觉得使用起来容易得多。您还可以从日历中获取Date对象。
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
答案 4 :(得分:14)
在Java 8中:
ZonedDateTime dateTime = ZonedDateTime.now();
答案 5 :(得分:12)
答案 6 :(得分:10)
java.lang.System.currentTimeMillis();
将返回自纪元以来的日期时间
答案 7 :(得分:6)
import org.joda.time.DateTime;
DateTime now = DateTime.now();
答案 8 :(得分:5)
如果您创建一个新的Date对象,默认情况下它将设置为当前时间:
import java.util.Date;
Date now = new Date();
答案 9 :(得分:3)
Java一直对日期和时间用例的支持不足。例如,现有的类(例如java.util.Date
和SimpleDateFormatter
)不是线程安全的,这可能导致并发问题。 API中也存在一些缺陷。例如,java.util.Date
中的年份从1900开始,月份从1开始,数天从0开始 - 不太直观。这些问题导致了第三方日期和时间库的普及,例如Joda-Time
。为了解决新的日期和时间,API是为Java SE 8设计的。
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
根据doc:
方法
now()
使用系统返回当前日期时间 时钟和默认时区,不为空。它获得了当前的 默认时区中系统时钟的日期时间。这将 在默认时区查询系统时钟以获取当前值 约会时间。使用此方法将阻止使用 用于测试的备用时钟,因为时钟是硬编码的。