由于java.util.Date大多已被弃用,获取给定日期和UTC时间戳的正确方法是什么?这个时间戳可以与System.currentTimeMillis()
进行比较。
通过使用Calendar类,可以在指定的时区创建特定时间戳。一旦获得时间戳,您可以获取毫秒级时间戳进行比较:
Calendar cal = new GregorianCalendar();
cal.set(Calendar.DAY_OF_MONTH, 10);
// etc...
if (System.currentTimeMillis() < cal.getTimeInMillis()) {
// do your stuff
}
编辑:改为使用更直接的方法从日历实例中获取毫秒时间。感谢 Outlaw Programmer。
许多使用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。
虽然我自己没有尝试过,但我认为如果您的项目允许使用外部库,您应该看一下JODA-Time项目(开源)。
据我所知,JODA时间对于新的日期/时间JSR(通常在Java7中)做出了很大的贡献。
许多人声称JODA时间是解决所有java.util.Date / Calendar问题的解决方案;-)
绝对值得一试。
java.util.Date
,java.util.Calendar
和java.text.SimpleTextFormat
现在已经成为遗留系统,被 java.time 类所取代。 - Basil Bourque