【问题标题】:Difference between two dates (Android) [duplicate]两个日期之间的差异(Android)[重复]
【发布时间】:2016-08-09 03:16:03
【问题描述】:

我需要在两个日期之间确定一个时间。假设dateStart = 1470712122173dateStop = 1470712127320。 这两个日期之间的差等于5147 所以,据此,我希望得到一个答案 = 5 秒,但我看到了19:00:05。这 19 个小时从何而来?

毫秒代码 (= 5147) -> 时间:

private string foo(long dateStart, long dateStop) {
    long diff = dateStop - dateStart;
    DateFormat simple = SimpleDateFormat.getTimeInstance(); 
    Date date = new Date(diff); 
    return simple.format(date);
}

谢谢你的解释。

【问题讨论】:

  • 两个时间点的差不是另一个时间点。这是一个持续时间。
  • 也许您在 UTC-5 时区。您可以使用 Joda lib 计算时差,也可以自己计算秒、分钟、..
  • @flkes 我认为 +19 的​​时区不存在。我认为它具有差异值
  • 与时区无关。正如@LukeLee 所说:new Date(diff) 毫无意义。将diff 保留为long,它只是毫秒数,而不是日期。

标签: java android date-arithmetic


【解决方案1】:

您需要正确掌握基本概念。当您在两个Date 对象之间进行差异时,您会得到两个时间点之间的持续时间,试图将差异视为另一个时间点是没有意义的。

这是一个使用 Java 8 时间 API 获取两个时间点之间差异的示例 (java.time.Instant):

import java.time.Duration;
import java.time.Instant;

public class TimeDifferenceSample {

    static Duration diff(Instant start, Instant end) {
        return Duration.between(start, end);
    }

    public static void main(String [] args) {
        long start = 1470712122173L;
        long end = 1470712127320L;

        Duration dur = diff(Instant.ofEpochMilli(start), Instant.ofEpochMilli(end));
        System.out.println(dur.getSeconds() + " seconds");
    }
}

输出:

5 seconds

对于Android,我不是专家,但你可以查看The Joda Time Project,它提供了类似的功能。我还找到了Android verion here

【讨论】:

    【解决方案2】:
        Date date = new Date(5147);
       //this method has deprecation, just for illustration
        System.out.println(date.getSeconds());
    
     //in java 8 this works
            LocalDateTime ldate1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(1470712122173l), ZoneId.systemDefault());
            LocalDateTime ldate2 = LocalDateTime.ofInstant(Instant.ofEpochMilli(1470712127320l), ZoneId.systemDefault());
    
            System.out.println(Duration.between(ldate1, ldate2).getSeconds());
    

    【讨论】:

      【解决方案3】:

      你也可以使用java.util.concurrent.TimeUnit

      输出

      0 : 0 : 5
      

      代码

      import java.util.concurrent.TimeUnit;
      
      public class HelloWorld {
      
          public static void main(String[] args) {
              long dateStart = 1470712122173l, dateStop = 1470712127320l;
              long diff = dateStop - dateStart;
      
              long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(diff);
              long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(diff);
              long diffInHours = TimeUnit.MILLISECONDS.toHours(diff);
      
              System.out.println(diffInHours + " : " + diffInMinutes + " : " + diffInSeconds);
          }
      }
      

      当您计算两个日期实例之间的差异时,您确实得到了差异秒数。假设您得到 30 seconds 作为差异。

      现在,如果您将此30 seconds 再次转换为date 实例(12 小时)格式,那么您将得到12 hr 00 minutes 30 seconds PM 的答案。因此,当您计算两个日期之间的差异时,您不应该将差异转换回日期实例。

      【讨论】:

      • 谢谢你,伙计。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2014-01-18
      • 2017-04-29
      • 2012-04-03
      相关资源
      最近更新 更多