我有两个unix时间戳,如
currentTimestamp=1213083655;
previousTimestamp=1213083715;
如何计算这两个时间戳之间的分钟数。或者换句话说,这两个时间戳之间的分钟差异。
目前我正在做的是
(previousTimestamp-currentTimestamp)%60
这是正确的,因为时间戳是以秒为单位的时间,这样做会返回分钟。但唯一的问题是,当差值为60的倍数时,余数为0,因此计算结果为0分钟,这是错误的。就像上面的数字一样,差异是60,所以结果为0.那么最好的方法是什么呢?
此致 艾哈迈尔
答案 0 :(得分:4)
使用除法而不是模数。
%
是模数命令。你没有得到分钟数。在计算完整分钟后,您将获得剩余的秒数。
/
是除法命令。这就是你要找的东西。
(previousTimestamp-currentTimestamp)/60
这是你想要的命令。
答案 1 :(得分:2)
您可以在项目中使用JodaTime进行日期/时间操作。要找出两个DateTime之间的差距,以分钟为单位:
DateTime now = DateTime.now();
DateTime dateTime = now.plusMinutes(10);
Minutes minutes = Minutes.minutesBetween(now, dateTime);
System.out.println(minutes.getMinutes());
如果您使用Maven,您可以添加JodaTime添加以下依赖项:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.3</version>
</dependency>
答案 2 :(得分:1)
你不需要模数,而是需要除法。假设差异是150秒。您需要将除以60才能找到差异:2.5
:
double differenceInMinutes = (currentTimestamp - previousTimestamp) / 60d;
答案 3 :(得分:1)
为什么使用%?
%
为您提供模块,而不是您正在寻找的模块。
/
是您必须使用的。一个简单的划分。
答案 4 :(得分:0)
这是他使用Joda-Time库的想法,但适用于从字面上解决问题给出的值的问题。
使用Joda-Time 2.3和Java 7.
// © 2013 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so.
// import org.joda.time.*;
// We do not need time zones if our only goal is to count minutes. But realistically we are probably doing other work as well.
// Better to specify a time zone explicitly rather than rely on default.
// Time Zone list… http://joda-time.sourceforge.net/timezones.html (not quite up-to-date, read page for details)
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
// Convert Unix time (seconds since epoch of 1970) to Joda-Time DateTime count of milliseconds since same epoch.
// Note the use of the 'long' type rather than the usual 'int', a common error when working with millisecond counts since epoch.
// Notice the hard-coded "L" on the numbers.
long start = ( 1213083655L * 1000L );
long stop = ( 1213083715 * 1000L );
DateTime dateTimeStart = new DateTime( start, timeZone );
DateTime dateTimeStop = new DateTime( stop, timeZone );
int minutesElapsed = Minutes.minutesBetween( dateTimeStart, dateTimeStop ).getMinutes();
转储到控制台...
System.out.println( "dateTimeStart: " + dateTimeStart );
System.out.println( "dateTimeStop: " + dateTimeStop );
System.out.println( "minutesElapsed: " + minutesElapsed );
跑步时......
dateTimeStart: 2008-06-10T09:40:55.000+02:00
dateTimeStop: 2008-06-10T09:41:55.000+02:00
minutesElapsed: 1