给定日期的System.currentTimeMillis()是多少?

5

由于java.util.Date大多已被弃用,获取给定日期和UTC时间戳的正确方法是什么?这个时间戳可以与System.currentTimeMillis()进行比较。


请注意:旧的日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleTextFormat 现在已经成为遗留系统,被 java.time 类所取代。 - Basil Bourque
4个回答

10

通过使用Calendar类,可以在指定的时区创建特定时间戳。一旦获得时间戳,您可以获取毫秒级时间戳进行比较:

Calendar cal = new GregorianCalendar();
cal.set(Calendar.DAY_OF_MONTH, 10);
// etc...

if (System.currentTimeMillis() < cal.getTimeInMillis()) {
  // do your stuff
}

编辑:改为使用更直接的方法从日历实例中获取毫秒时间。感谢 Outlaw Programmer。


2
日历实际上有一个getTimeInMillis()方法,比getTime().getTime()更直接一些。无论如何+1。 - Tim Frey

7

许多使用Date的官方替代品是Calendar。不幸的是,它相当笨拙且过度设计。您可以通过以下方式解决问题:

long currentMillis = System.currentTimeMillis();
Date date = new Date(currentMillis);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
long calendarMillis = calendar.getTimeInMillis();
assert currentMillis == calendarMillis;

日历也可以以不同的方式初始化,甚至可以逐个字段进行初始化(小时、分钟、秒等)。请查看Javadoc。


3

虽然我自己没有尝试过,但我认为如果您的项目允许使用外部库,您应该看一下JODA-Time项目(开源)。

据我所知,JODA时间对于新的日期/时间JSR(通常在Java7中)做出了很大的贡献。

许多人声称JODA时间是解决所有java.util.Date / Calendar问题的解决方案;-)

绝对值得一试。


我还建议看一下JODA-Time - 当前的java.util.Date和Calendar在许多方面都有很大的问题(在JODA页面上,有一个关于为什么首先创建JODA项目的激励故事)。 - Neeme Praks

1

看一下日历类。

你可以用当前时间(未弃用)创建一个Data,然后从中创建一个Calendar(也有其他方法)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接