当毫秒数很长时,将毫秒添加到Java日期

问题描述:

当毫秒存储为“长”时,我正在寻找将毫秒添加到Java日期的最佳方法。 Java日历有一个函数,但它只需要一个'int'作为金额。当毫秒数很长时,将毫秒添加到Java日期

这是一个解决方案,我有一个提议......

Calendar now = Calendar.getInstance(); 
Calendar timeout = Calendar.getInstance(); 

timeout.setTime(token.getCreatedOn()); 
timeout.setTimeInMillis(timeout.getTimeInMillis() + token.getExpiresIn()); 

任何其他建议?

您的解决方案实际上看起来好像差不多。我最初发布的答案是通过Date,当时我没有正确考虑getTimeInMillissetTimeInMillis

但是,您打电话给setTime,然后setTimeInMillis这对我来说似乎有点多余。你的代码看起来相同的:

Calendar timeout = Calendar.getInstance(); 
timeout.setTimeInMillis(token.getCreatedOn().getTime() + token.getExpiresIn()); 

一个普遍更好的替代办法是使用Joda Time虽然:)这通常是一个更好的日期/时间API。

+0

我在一些实现中使用calendar.getInstance(),但不得不放弃它,因为如果Date带有TimeZones,日历将会打破它。 – will824 2013-12-21 21:53:40

+0

@ will824:我完全不理解你的评论 - '日期'*从不*具有与之相关的时区。从Unix纪元开始,它总是*毫秒。 – 2013-12-22 08:45:43

+0

@Jon其实它应该如你所说,但如果你检查Date对象,它总是带有某种时区。似乎Java在Date操作方面有很多问题(这就是为什么Joda出生的原因),这就是其中之一。这就是为什么我不能使用日历来解决我的问题,而是不得不解决Joda毫米操作的原因。当然,我的问题是非常具体的,并且与从1970年1月1日通过的应该是0的总秒数有关,但由于时区,我收到了一个负数。在我的情况下使用日历会减少1小时:( – will824 2014-01-02 23:09:32

可以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)为我所有的日期和表示层只使用日期。即。当你想将日期转换为文本。