如何区分日期时间类型应为yyyy-mm-dd hh:mm:ss的两个日期

时间:2016-07-18 11:04:17

标签: java android

我想在输入参数的两个日期之间得到区别 如果通过任何输入日期,那么它应该转换为 yyyy-mm-dd hh:mm:ss

  

Date1:​​2016-05-30 20:16:00

  

Date2:2016-05-29 20:17:00

public long totalHour(Date startDate, Date endDate) {

          int diffInDays = (int) ((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));

        return diffInDays;
    }

我正在使用此代码,但无法以整数形式获取输出,请帮助我。

1 个答案:

答案 0 :(得分:1)

计算Java中两个日期之间差异的经典方法是:

  1. 将它们解析为Date个对象
  2. 通过调用Date.getTime()
  3. 将它们转换为“自UNIX纪元以来的毫秒数”
  4. 从另一个中减去一个。
  5. 除以常数,从毫秒转换为您需要的时间单位。
  6. 您的代码似乎正在这样做,但存在一些问题:

    1. 常数错误
    2. 你正在截断int,如果这两个日期相距足够远,可能会给你错误。
    3. 这会更好:

      public long hoursDifference(Date start, Date end) {
          return ((end.getTime() - start.getTime()) / (1000 * 60 * 60));
      }
      

      此外,您可能需要考虑舍入而不是截断。

      以任意格式解析日期是不可能的......除非您知道先验预期的格式是什么。在这种情况下,您只需一次尝试一种格式,直到您的解析成功为止。例如,像这样。

        SimpleDateFormat[] sdf = new SimpleDateFormat[] {
           new SimpleDateFormat(/* format 1 */),
           new SimpleDateFormat(/* format 2 */),
           ...
        };
      
        ...
      
        Date date = null;
        for (int i = 0; i < sdf.length && date == null; i++) {
            try { 
                date = sdf[i].parse(dateString);
            } catch (ParseException ex) { /* */ }
        }
        if (date == null) {
            /* report parse error ... */
        }
      

      但要注意,您将无法正确处理所有可能的日期格式。例如,您将无法区分7/6/2000(2000年6月7日英语)和2000年7月6日(美国2000年7月6日)。

      IMO,你最好给用户一个类型的日期选择器。

        

      ...但我希望Dataformat就像这样yyyy-mm-dd hh:mm:ss

      日期格式字符串记录在SimpleDateFormat的{​​{3}}中。阅读文档,您将能够解决它。您将能够找到解析其他格式的方法!