相当于C#的DateTime.Now在Java中?

mrb*_*lah 341 java datetime

如何在Java中获取当前日期?

在C#中它是DateTime.Now.

del*_*ego 411

只需构造一个Date没有任何参数的新对象; 这会将当前日期和时间分配给新对象.

import java.util.Date;

Date d = new Date();
Run Code Online (Sandbox Code Playgroud)

在的话的Javadoc无参数的构造函数:

分配一个Date对象并对其进行初始化,使其表示分配时间,测量精确到毫秒.

确保你正在使用java.util.Date而不是java.sql.Date- 后者没有零参数构造函数,并且有一些不同的语义,这是完全不同的对话的主题.:)

  • 另请注意,GregorianCalendar和许多类似对象的工作方式相同.因此,无论您使用何种类型的日期/日历对象,零参数构造函数通常会将对象初始化为当前日期/时间. (13认同)
  • 请考虑新的Java8 API - [LocalDateTime.now()和ZonedDateTime.now()](http://stackoverflow.com/a/26225884/513342) (9认同)

cdm*_*kay 58

许多人认为Java DateCalendar类的设计很差.您应该看看Joda Time,这是一个通常用来代替Java内置日期库的库.

DateTime.Now在Joda Time中相当于:

DateTime dt = new DateTime();
Run Code Online (Sandbox Code Playgroud)

更新

正如评论中所述,最新版本的Joda Time有一个DateTime.now()方法,所以:

DateTime dt = DateTime.now();
Run Code Online (Sandbox Code Playgroud)

  • 当前(2.1)版本的Joda似乎有一个静态DateTime.now方法()(可选择接受DateTimeZone或Chronology).http://joda-time.sourceforge.net/apidocs/org/joda/time/DateTime.html#now%28%29 (4认同)
  • 请注意,这个答案是在 2010 年发布的。Java 8 吸收了 Joda Time 的许多最佳功能。有关更多信息,请参阅[官方文档](https://docs.oracle.com/javase/tutorial/datetime/index.html)和许多其他在线文章。 (2认同)

Bas*_*que 34

TL;博士

Instant.now()
Run Code Online (Sandbox Code Playgroud)

java.time

java.util.Date类已经被Java 8及更高版本中的新java.time包(教程)所取代.旧的java.util.Date/.Calendar类是出了名的麻烦,令人困惑和有缺陷的.避免他们.

ZonedDateTime

获取java.time中的当前时刻.

ZonedDateTime now = ZonedDateTime.now();
Run Code Online (Sandbox Code Playgroud)

一个ZonedDateTime包囊:

  • 日期.
  • 时间,分辨率只有一秒到几纳秒.
  • 时区.

如果未指定时区,则会以静默方式分配JVM的当前默认时区.最好指定所需/预期的时区,而不是默认依赖.

ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
Run Code Online (Sandbox Code Playgroud)

世界标准时间

通常更好地养成在UTC时区完成后端工作(业务逻辑,数据库,存储,数据交换)的习惯.上面的代码隐式依赖于JVM的当前默认时区.

Instant类代表在UTC时间线与纳秒的分辨率的时刻.

Instant instant = Instant.now();
Run Code Online (Sandbox Code Playgroud)

Instant班是java.time一个基本构建块级和可在代码中经常使用.

当您需要更灵活的格式化时,转换为OffsetDateTime.指定一个ZoneOffset对象.对于UTC,请使用UTC的便捷常量.

OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
Run Code Online (Sandbox Code Playgroud)

时区

您可以轻松调整到另一个时区以呈现给用户.使用适当的时区名称,不要使用3-4个字母代码,例如ESTIST.

ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
Run Code Online (Sandbox Code Playgroud)

生成该日期时间值的字符串表示,已本地化.

String output = DateTimeFormatter
    .ofLocalizedDate( FormatStyle.FULL )
    .withLocale( Locale.CANADA_FRENCH )
    .format ( nowMontreal );
Run Code Online (Sandbox Code Playgroud)

Instant

或者,要保持UTC,请使用Instant.一个Instant对象表示在时间轴上一会儿,以纳秒的分辨率,总是在UTC.这为分区日期时间提供了构建块,并提供了时区分配.您可以通过这种方式在概念上考虑它:

ZonedDateTime= Instant+ZoneId

你可以Instant从a中提取一个ZonedDateTime.

Instant instantNow = zdt.toInstant();
Run Code Online (Sandbox Code Playgroud)

你可以从一个瞬发开始.无需在此处指定时区,因为Instant始终使用UTC.

Instant now = Instant.now();
Run Code Online (Sandbox Code Playgroud)


ral*_*lph 16

我更喜欢使用Calendar对象.

Calendar now = GregorianCalendar.getInstance()
Run Code Online (Sandbox Code Playgroud)

我觉得使用它要容易得多.您还可以从日历中获取Date对象.

http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html

  • 或者它可以简单地是`Calendar.getInstance()` (4认同)

Vit*_*nko 14

在Java 8中它是:

ZonedDateTime dateTime = ZonedDateTime.now();
Run Code Online (Sandbox Code Playgroud)


Cha*_*tni 12

import java.util.Date;   
Date now = new Date();
Run Code Online (Sandbox Code Playgroud)

请注意,Date对象是可变的,如果你想做任何复杂的事情,请使用jodatime.


use*_*773 10

java.lang.System.currentTimeMillis(); 将返回自纪元以来的日期时间


gor*_*rdy 6

import org.joda.time.DateTime;

DateTime now = DateTime.now();
Run Code Online (Sandbox Code Playgroud)


par*_*ath 5

如果您创建一个新的Date对象,默认情况下它将设置为当前时间:

import java.util.Date;
Date now = new Date();
Run Code Online (Sandbox Code Playgroud)