给定日期的 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.Date
、java.util.Calendar
和 java.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()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
CalendarDatelong类型的时间,三者之间如何转化