2017-09-14 223 views
-1

如何计算两个日期之间的秒差?获取两个日期之间的差异秒数dateTime

我有这样的:

LocalDateTime now = LocalDateTime.now(); // current date and time 
LocalDateTime midnight = now.toLocalDate().atStartOfDay().plusDays(1); //midnight 

在这种情况下,时间是:now 2017-09-14T09:49:25.316 midnight 2017-09-15T00:00

我如何计算int second = ...?

而结果,在这种情况下,我想回报是51035

我该怎么办?

升级解决

我试试这个:

DateTime now = DateTime.now(); 
DateTime midnight = now.withTimeAtStartOfDay().plusDays(1); 
Seconds seconds = Seconds.secondsBetween(now, midnight); 
int diff = seconds.getSeconds(); 

现在返回秒整型变量beetween日期的差异。

感谢所有用户的回复。

+0

这是java的遗憾 –

回答

4
int seconds = (int) ChronoUnit.SECONDS.between(now, midnight); 
+0

干净的解决方案。其实清洁,那么我的。请注意,需要使用Java 8来使用ChronoUnit类 –

+1

@MathiasGhys'LocalDateTime'已经是Java 8的一部分。 –

+3

'()'之间'返回'long'。如果你想分配一个'int'(在这种情况下是合理的),我建议在投射前进行边界检查。 –

0

将它们转换为自Epoch以来的秒数并比较差异。

LocalDateTime now = LocalDateTime.now(); 
LocalDateTime tomorrowMidnight = now.toLocalDate().atStartOfDay().plusDays(1); 

ZoneId zone = ZoneId.systemDefault(); 
long nowInSeconds = now.atZone(zone).toEpochSecond(); 
long tomorrowMidnightInSeconds = tomorrowMidnight.atZone(zone).toEpochSecond(); 
System.out.println(tomorrowMidnightInSeconds - nowInSeconds); 
0

我将通过epochTime做到这一点:

ZoneId zoneId = ZoneId.systemDefault(); 

LocalDateTime now = ...; 
long epochInSecondsNow = now.atZone(zoneId).toEpochSecond(); 

LocalDateTime midnight = ...; 
long epochInSecondsMidnight = midnight.atZone(zoneId).toEpochSecond(); 

,然后计算差值:

long result = (epochInSecondsMidnight - epochInSecondsNow)