【问题标题】:Get difference of seconds beetween two dateTime [duplicate]获取两个日期时间之间的秒数差异[重复]
【发布时间】:2017-09-14 07:54:50
【问题描述】:

如何计算两个日期之间的秒差?

我有这个:

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();

现在在整数变量中返回日期与日期之间的差异(以秒为单位)。

感谢所有用户的回复。

【问题讨论】:

  • 这是 java 对不起

标签: java localdate


【解决方案1】:
int seconds = (int) ChronoUnit.SECONDS.between(now, midnight); 

【讨论】:

  • 清洁解决方案。实际上比我的更干净。请注意使用 ChronoUnit 类需要 Java 8
  • @MathiasGhys LocalDateTime 已经是 Java 8 的一部分。
  • between() 返回一个long。如果您想分配给int(在这种情况下是合理的),我建议在转换之前进行边界检查。
【解决方案2】:

我会通过 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)

【讨论】:

    【解决方案3】:

    将它们转换为自 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2017-03-27
      相关资源
      最近更新 更多