计算两个时间戳的分钟差异

时间:2014-01-11 13:36:02

标签: java unix-timestamp

我有两个unix时间戳,如

currentTimestamp=1213083655;
previousTimestamp=1213083715;

如何计算这两个时间戳之间的分钟数。或者换句话说,这两个时间戳之间的分钟差异。

目前我正在做的是

(previousTimestamp-currentTimestamp)%60

这是正确的,因为时间戳是以秒为单位的时间,这样做会返回分钟。但唯一的问题是,当差值为60的倍数时,余数为0,因此计算结果为0分钟,这是错误的。就像上面的数字一样,差异是60,所以结果为0.那么最好的方法是什么呢?

此致 艾哈迈尔

5 个答案:

答案 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)

answer by Erhan Bagdemir是正确的。

这是他使用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