给定日期的 System.currentTimeMillis()? [复制]

Posted

技术标签:

【中文标题】给定日期的 System.currentTimeMillis()? [复制]【英文标题】:System.currentTimeMillis() for a given date? [duplicate] 【发布时间】:2010-10-12 14:01:56 【问题描述】:

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

【问题讨论】:

请注意:麻烦的旧日期时间类,例如 java.util.Datejava.util.Calendarjava.text.SimpleTextFormat,现在是 legacy,被 java.time 类所取代。 【参考方案1】:

使用Calendar 类,您可以在特定时区的特定时间创建时间戳。一旦你有了它,你就可以得到毫秒时间戳来比较:

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

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

编辑:更改为使用更直接的方法从日历实例获取时间(以毫秒为单位)。感谢非法程序员

【讨论】:

Calendar 实际上有一个 getTimeInMillis() 方法,它比 getTime().getTime() 更直接一点。无论如何 +1。【参考方案2】:

虽然我自己没有尝试过,但如果您的项目允许外部库,我相信您应该看看 JODA-Time 项目(开源)。 AFAIK,JODA 时间为日期/时间的新 JSR(通常在 Java7 中)做出了很大贡献。

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

绝对值得一试。

【讨论】:

我还建议查看 JODA-Time - 当前的 java.util.Date 和 Calendar 在很多方面都非常糟糕(在 JODA 页面上,有关于为什么首先创建 JODA 项目的励志故事)。【参考方案3】:

很多东西的“官方”替代日期是日历。不幸的是,它相当笨拙且设计过度。你的问题可以这样解决:

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

日历也可以用不同的方式初始化,甚至一次初始化一个字段(小时、分钟、秒等)。看看 Javadoc。

【讨论】:

【参考方案4】:

看看Calendar 类。

您可以使用当前时间(未弃用)制作数据,然后从中制作日历(还有其他方法)。

【讨论】:

以上是关于给定日期的 System.currentTimeMillis()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

计算程序运行的时间(以求得1-10000之间的素数为例)

CalendarDatelong类型的时间,三者之间如何转化

delphi 判断给定日期的天数,给定日期距离月初的天数,给定日期距离月末的天数

获取给定周年、给定月份和给定周的开始和结束日期

在熊猫中生成给定范围内的随机日期

用SQL语句计算出给定日期是星期几?