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

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

【问题讨论】:

标签: java timestamp


【解决方案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 类。

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

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 2019-03-04
      • 2017-05-07
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多