【问题标题】:Difference between dates to get "time ago"获取“时间前”的日期之间的差异
【发布时间】:2013-11-22 07:56:33
【问题描述】:

我有一个约会。想将它与当前日期进行比较,并希望在时间之前得到结果。

Date d1 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.
            getParameter(date1));
Date d2 = new SimpleDateFormat("yyyy-M-dd").parse((String) request.
            getParameter(date2));

long diff = d2.getTime() - d1.getTime();

并且想要这种时间前格式的差异。

例如。 3 小时 2 分钟前

【问题讨论】:

标签: java date time


【解决方案1】:

如果您可以使用其他库,我会推荐Joda Time,尤其是JSR 310,它将作为新的Date API 在JDK 8 中引入,并重新设计了Joda 时间。

与 Joda Time here 的时差。

【讨论】:

【解决方案2】:

如果您只想使用核心 Java 而不是用数字文字污染您的代码:

long diffInMillis = d2.getTime() - d1.getTime();
long diffInHours = TimeUnit.MILLISECONDS.toHours(diffInMillis);
long diffInMins = TimeUnit.MILLISECONDS.toMinutes(diffInMillis);
System.out.printf("%d hours %d mins ago%n", diffInHours, (diffInMins - TimeUnit.HOURS.toMinutes(diffInHours)));

【讨论】:

    【解决方案3】:

    你有很长的值,是毫秒,所以

    int min= (int) ((diff / (1000*60)) % 60);
    int sec= (int) (diff / 1000) % 60 ;
    

    【讨论】:

      【解决方案4】:

      试试,

       long diff = d2.getTime() - d1.getTime();
       long m= diff/(60*1000);
       long hour=m/60;
       long minutes=m%60;
      
       System.out.printf("%d hours %d mins ago%n", hour, minutes)
      

      【讨论】:

        【解决方案5】:

        以下是根据您的要求获取的另一种方法,但不推荐使用 getHours()getMinutes() 只需做System.out.println((d2.getHours()-d1.getHours())+" hours " +(d2.getMinutes()-d2.getMinutes()) +" mins ago");

        【讨论】:

          【解决方案6】:

          朋友们。我认为我们可以做到这一点,我的代码:

          public static String getIntervalUpdateTime(long intervalTime) {
              StringBuilder result = new StringBuilder();
              long interval = intervalTime / 1000;
              final long day = 24 * 60 * 60;
              final long hour = 60 * 60;
              final long minute = 60;
              int detailDay = 0;
              int detailHour = 0;
              int detailMinute = 0;
              int detailSecond = 0;
              if (interval >= day) {
                  detailDay = (int) (interval / day);
                  interval = interval - detailDay * day;
              }
              if (interval >= hour) {
                  detailHour = (int) (interval / hour);
                  interval = interval - hour * detailHour;
              }
              if (interval >= minute) {
                  detailMinute = (int) (interval / minute);
                  interval = interval - detailMinute * minute;
              }
              if (interval > 0) {
                  detailSecond = (int) interval;
              }
              result.setLength(0);
              if (detailDay > 0) {
                  result.append(detailDay);
                  result.append("day");
              }
              if (detailHour > 0) {
                  result.append(detailHour);
                  result.append("hour");
              }
              if (detailMinute > 0) {
                  result.append(detailMinute);
                  result.append("minutes");
              }
              if (detailSecond > 0) {
                  result.append(detailSecond);
                  result.append("seconds");
              }
              return result.toString();
          }
          

          这是我的答案。

          【讨论】:

          • 调用这个方法,参数是diff。你会得到答案的。
          【解决方案7】:

          使用Joda-Time 2.3 中的Period 类,专为此目的而构建。

          请参阅问题How to calculate elapsed time from now with Joda-Time? 的答案(尤其是this one)中的示例代码。

          【讨论】:

            猜你喜欢
            • 2023-03-26
            • 2012-02-04
            • 1970-01-01
            • 1970-01-01
            • 2019-04-24
            • 1970-01-01
            • 2020-03-22
            • 2017-03-27
            相关资源
            最近更新 更多