Java 如何获取当前日期和时间
如何获取Java中的当前日期和时间Java 如何获取当前日期和时间,java,datetime,Java,Datetime,如何获取Java中的当前日期和时间 我正在寻找与日期时间等价的东西。现在从C#开始。只需构造一个新的日期对象,不带任何参数;这将为新对象指定当前日期和时间 import java.util.Date; Date d = new Date(); 用for的话来说: 分配日期对象并对其进行初始化,使其表示分配日期对象的时间,以最接近的毫秒为单位 确保您使用的是java.util.Date而不是java.sql.Date——后者没有零参数构造函数,并且具有一些不同的语义,这是一个完全不同的对话的主
我正在寻找与日期时间等价的东西。现在从C#开始。只需构造一个新的
日期
对象,不带任何参数;这将为新对象指定当前日期和时间
import java.util.Date;
Date d = new Date();
用for的话来说:
分配日期对象并对其进行初始化,使其表示分配日期对象的时间,以最接近的毫秒为单位
确保您使用的是java.util.Date
而不是java.sql.Date
——后者没有零参数构造函数,并且具有一些不同的语义,这是一个完全不同的对话的主题。:)
请注意,对象是可变的,如果要执行任何复杂的操作,请使用。如果创建新的日期对象,默认情况下它将设置为当前时间:
import java.util.Date;
Date now = new Date();
我更喜欢使用日历对象
Calendar now = GregorianCalendar.getInstance()
我发现和他一起工作要容易得多。您还可以从日历中获取日期对象
许多人认为Java和类的设计很差。您应该看看,一个常用于替代Java内置日期库的库
相当于DateTime。现在Joda Time中的是:
DateTime dt = new DateTime();
更新
如评论中所述,Joda Time的最新版本有一个DateTime.now()
方法,因此:
DateTime dt = DateTime.now();
java.lang.System.currentTimeMillis()代码>将返回自纪元以来的日期时间,在Java 8中,它是:
import org.joda.time.DateTime;
DateTime now = DateTime.now();
ZonedDateTime dateTime = ZonedDateTime.now();
tl;博士
java.time
java.util.Date类已被Java8及更高版本中的new()过时。旧的java.util.Date/.Calendar类是出了名的麻烦、混乱和缺陷。避开它们
ZoneDateTime
获取java.time中的当前时刻
ZonedDateTime now = ZonedDateTime.now();
A封装了:
- 日期
- 一天中的某个时间,距离分辨率只有几分之一秒
- 时区李>
如果未指定时区,JVM的当前默认时区将以静默方式分配。与隐式依赖默认时区相比,最好指定所需/预期时区
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
UTC
通常最好养成在时区内完成后端工作(业务逻辑、数据库、存储、数据交换)的习惯。上面的代码隐式地依赖于JVM的当前默认时区
Instant
类以UTC为单位表示时间线上的一个瞬间,分辨率为纳秒
Instant instant = Instant.now();
Instant
类是java.time中的一个基本构造块类,可能经常用于代码中
当您在格式化方面需要更大的灵活性时,请将其转换为。指定一个对象。对于UTC,请使用handy
时区
您可以轻松地调整到另一个时区,以便向用户演示。使用a,切勿使用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,请使用。即时
对象表示时间线上的一个时刻,分辨率为纳秒,始终以UTC为单位。这为分区日期时间以及时区指定提供了构建块。你可以这样从概念上考虑:
=+
您可以从ZoneDateTime
提取即时
Instant instantNow = zdt.toInstant();
你可以从瞬间开始。无需在此处指定时区,因为Instant
始终以UTC为单位
Instant now = Instant.now();
Java对日期和时间用例的支持总是不够。例如,现有类(如java.util.Date
和SimpleDataFormatter
)不是线程安全的,这可能会导致并发问题。API中也存在某些缺陷。例如,java.util.Date
中的年从1900开始,月从1开始,天从0开始——这不是很直观。这些问题导致了第三方日期和时间库的流行,如Joda-time
。为了解决这个问题,我们为JavaSE8设计了一个新的日期和时间API
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
根据:
方法now()
使用系统返回当前日期时间
时钟和默认时区,不为空。它获得电流
默认时区中系统时钟的日期时间。这将
查询默认时区的系统时钟以获取当前时钟
日期时间。使用此方法将阻止使用
测试的备用时钟,因为该时钟是硬编码的
还要注意,GregorianCalendar和许多类似对象的工作方式相同。因此,无论您使用哪种类型的日期/日历对象,零参数构造函数通常都会将对象初始化为当前日期/时间,日历类应该用于在日期和时间字段之间转换,DATEFrand类应该用于格式化和解析日期字符串。请考虑新的Java8 API——当前(2.1)焦达版本似乎具有静态数据类型。现在方法()(可选地接受DATETMETZORD或年表)。请注意,这个答案是在2010年发布的。Java8吸收了Joda Time的许多最佳特性。有关详细信息,请参阅和许多其他联机文章。或者它可以是Calendar.getInstance()
用于日志记录,但需要解析和转换才能显示给用户。我还发布了关于重复问题的更多详细信息。此问题比以前标记为重复的问题更旧。因此,我颠倒了名称,重新打开这个问题,并将较新的问题标记为重复问题。
Instant instantNow = zdt.toInstant();
Instant now = Instant.now();
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);