【问题标题】:Difference of two dates两个日期的差异
【发布时间】:2018-07-30 06:18:13
【问题描述】:

我需要了解以下 2 个日期之间的差异。两个日期都是字符串格式。

String sDate1 = Thu Jun 26 13:45:32 IST 2018;
String sDate2 = Thu Jul 16 03:25:37 IST 2018;

Date date1 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(sDate1);
Date date2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(sDate2)
long dateDiff2 = date2.getTime() - date1.getTime();

【问题讨论】:

  • 你的问题是?
  • 你的问题是什么?看起来你已经有了毫秒的差异。
  • @Samankumara 不工作 不是错误描述。添加你得到的结果和预期的结果
  • @TimBiegeleisen 否决票的主要原因归结为这样一个事实,即这个问题很常见,有很多可用的答案,你永远不应该对日期/时间值进行简单的数学计算,有管理这些计算应该如何进行的规则太多,以至于不使用适当的 API 或库
  • @Samankumara 所以,你有两个问题。 1- 如何将字符串值转换为日期值和 2- 如何计算这些日期值之间的差异。这两个问题都很常见,并且之前已经提出过

标签: java date


【解决方案1】:

引号

您忘记了输入字符串周围的双引号。

java.time

您正在使用多年前被 java.time 类过时的糟糕的旧类。

解析

使用DateTimeFormatter 解析您的输入字符串以获取ZonedDateTime 对象。搜索 Stack Overflow,因为这已被多次介绍。

已过

要计算经过的小时、分钟和秒,请将这些 ZonedDateTime 对象传递给 Duration.between 方法。对于年-月-日,请使用Period。搜索 Stack Overflow,因为这已被多次介绍。

【讨论】:

    【解决方案2】:

    试试这个:-

    String sDate1 = Thu Jun 26 13:45:32 IST 2018;
    String sDate2 = Thu Jul 16 03:25:37 IST 2018;
    
    Date d1= new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(sDate1);
    Date d2= new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(sDate2); 
    long diff = d2.getTime() - d1.getTime();
    long diffSeconds = diff / 1000 % 60;
    long diffMinutes = diff / (60 * 1000) % 60;
    long diffHours = diff / (60 * 60 * 1000);
    System.out.println("Time in seconds: " + diffSeconds + " seconds.");
    System.out.println("Time in minutes: " + diffMinutes + " minutes.");
    System.out.println("Time in hours: " + diffHours + " hours.");
    

    或者你可以使用 TimeUnit:-

    long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(diff );
    long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(diff );
    long diffInHours = TimeUnit.MILLISECONDS.toHours(diff );
    

    【讨论】:

    • 这些可怕的类在几年前被 java.time 类所取代。 2018 年的建议很糟糕。
    • 我同意你的看法,但对于大人来说,这样做是正确的方法,否则他也可以使用 jodaTime。
    • 不,这些课程对于初学者来说是可怕的东西,其设计糟糕透顶,骇人听闻的技巧会让任何试图学习编程和 OOP 的人感到困惑。 Joda-Time 项目现在处于维护模式,其发明者已着手创建 java.time
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2014-02-12
    • 2015-09-14
    • 2015-06-21
    • 2016-08-04
    相关资源
    最近更新 更多