https://stackoverflow.com/questions/5175728/how-to-get-the-current-date-time-in-java
在Java中获取当前日期/时间
描述
在Java中获取当前日期/时间的最佳方法是什么?
回答
这取决于您想要的日期/时间形式:
- 如果您希望将日期/时间作为单个数值,则使用
System.currentTimeMillis()
能获得,这个函数返回UNIX纪元(作为Javalong
)之后的毫秒数。此值是UTC时间点的增量,并且与本地时区无关…假设系统时钟已设置正确。 - 如果您希望表单中的日期/时间组件允许您以数字方式访问(年,月等),则可以使用以下方法之一:
new Date()
为您提供一个当前日期/时间初始化的Data
对象。问题是DateAPI
方法大多存在缺陷…并且已弃用。Calendar.getInstance()
为您提供一个当前日期/时间,并使用默认的Locale
和TimeZone
初始化的Calendar
对象,其他重载允许您使用特定Locale或TimeZone
。Calendat
可以使用,但API仍然很麻烦。new org.joda.time.DateTime()
为您提供一个当前日期/时间,并使用默认的时区和年表初始化的Joda-time
对象。还有很多其他的Joda
的替代方案…这里不描述太多。(但请注意,有些人报告说Joda
时间有性能问题。例如,Jodatime的LocalDateTime在第一次使用时速度很慢。)- 在Java中8,调用
LocalDateTime.now()
和ZonedDateTime.now()
会给你展示 1 当前日期/时间。
在Java 8之前,大多数了解这些事情的人都建议Joda-time(到目前为止)作为处理涉及时间点和持续时间计算的最佳Java API。在Java 8到来时,这已不再适用。但是,如果您已经在代码库中使用Joda
,则没有充足理由需要去迁移。
回答2
在Java 8中它是:
LocalDateTime.now()
如果您需要时区信息:
ZonedDateTime.now()
如果你想打印花哨的格式化字符串:
System.out.println(ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME))
请注意,
LocalDateTime
不包含时区。正如javadoc所说:“它不能代表时间线上的瞬间,没有附加信息,如偏移或时区。” ↩︎