当毫秒数很长时,将毫秒添加到Java日期
问题描述:
当毫秒存储为“长”时,我正在寻找将毫秒添加到Java日期的最佳方法。 Java日历有一个加函数,但它只需要一个'int'作为金额。当毫秒数很长时,将毫秒添加到Java日期
这是一个解决方案,我有一个提议......
Calendar now = Calendar.getInstance();
Calendar timeout = Calendar.getInstance();
timeout.setTime(token.getCreatedOn());
timeout.setTimeInMillis(timeout.getTimeInMillis() + token.getExpiresIn());
任何其他建议?
答
您的解决方案实际上看起来好像差不多。我最初发布的答案是通过Date
,当时我没有正确考虑getTimeInMillis
和setTimeInMillis
。
但是,您打电话给setTime
和,然后setTimeInMillis
这对我来说似乎有点多余。你的代码看起来相同的:
Calendar timeout = Calendar.getInstance();
timeout.setTimeInMillis(token.getCreatedOn().getTime() + token.getExpiresIn());
一个普遍更好的替代办法是使用Joda Time虽然:)这通常是一个多更好的日期/时间API。
答
可以AO创建与当前本地日期,你需要添加一个日期加上毫秒的数量为到期时间
import java.util.Date;
long expiremilis = 60000l; // 1 minute
// Expires in one minute from now
Date expireDate = new Date(System.currentTimeMillis() + expiremilis);
,或具有日历相同
long expiremilis = 60000l; // 1 minute
Calendar expireDate= Calendar.getInstance();
// Expires on one minute from now
expireDate.setTimeInMillis(System.currentTimeMillis() + expiremilis);
如果使用您可以执行的现有日期对象:
import java.util.Date;
long expiremilis = 60000l; // 1 minute
// Expires on one minute from the date object date
Date expireDate = new Date(myDate.getTime() + expiremilis);
并且与现有日历对象
long expiremilis = 60000l; // 1 minute
Calendar expireDate= Calendar.getInstance();
// Expires on one minute from the calendar date
expireDate.setTimeInMillis(myCalendar.getTimeInMillis() + expiremilis);
答
日历是一个相当昂贵的日期对象,它的功能不是最好的。如果你想要一个全功能的日期对象,我建议看看JODA Time,它有一个你想要的功能。
但是,更简单的Java Date对象是@Dubas指示的Date类。
对于您正在执行的操作类型,更简单的方法是使用长整型。这也快得多。
long timeoutMS = token.getCreatedOn() + token.getExpiresIn();
我用长时间(GMT)为我所有的日期和表示层只使用日期。即。当你想将日期转换为文本。
我在一些实现中使用calendar.getInstance(),但不得不放弃它,因为如果Date带有TimeZones,日历将会打破它。 – will824 2013-12-21 21:53:40
@ will824:我完全不理解你的评论 - '日期'*从不*具有与之相关的时区。从Unix纪元开始,它总是*毫秒。 – 2013-12-22 08:45:43
@Jon其实它应该如你所说,但如果你检查Date对象,它总是带有某种时区。似乎Java在Date操作方面有很多问题(这就是为什么Joda出生的原因),这就是其中之一。这就是为什么我不能使用日历来解决我的问题,而是不得不解决Joda毫米操作的原因。当然,我的问题是非常具体的,并且与从1970年1月1日通过的应该是0的总秒数有关,但由于时区,我收到了一个负数。在我的情况下使用日历会减少1小时:( – will824 2014-01-02 23:09:32