繁体   English   中英

SimpleDateFormat格式化日期到日期之间的日期

[英]SimpleDateFormat format date between to dates issue

我需要计算两个日期之间的时间间隔,现在是一个日期。 我正在使用SimpleDateFormat格式化日期。

public String getPeriod(Date endDate) {
    String format;
    Date now = new Date();
    long period  = endDate.getTime() - now.getTime();

    if (now.after(endDate)) {
        return "passed";
    } else {
        if (period < 1000 * 60 * 60)
            format = "m'M' s'S'";
        else if (period  < 1000 * 60 * 60 * 24)
            format = "k'H' m'M'";
        else
            format = "'Too much'";

        SimpleDateFormat formatter = new SimpleDateFormat(format);
        return formatter.format(new Date(period)) + " / for testing - " + period / 3600000 + " hours";
    }
}

因此,例如,如果endDate等于Wed Nov 12 13:30:02 EET 2014 (EST)我将输入以下内容:

1 H 36 M / for testing - 22 hours

如您所见,我的测试计算和格式的方法结果不匹配。 我究竟做错了什么?

差异是由于时区。 例如,在我的情况下,将以小时为单位的时间作为参数,我得到3H作为输出,因为日期是Thu Jan 01 03:00:00 EET1970。请注意EET(我来自东欧洲)。

如果您通知Java使用GMT时间,则您的代码将起作用,如新的Date(long)描述中所述:

分配一个Date对象,并将其初始化为表示自标准基准时间(即“纪元”)(即GMT 1970年1月1日)以来指定的毫秒数。

另外,请记住,日期不能给出完美的结果。 使用以程序确定的日期精确到1小时(无毫秒/分钟差),日期计算得出的偏移量为59分钟,59秒和999毫秒。 如果需要更精确的值,则应使用纳秒。

但是,其他评论者是正确的。 您不应该以这种方式使用Java日期/日历,因为它是一个错误工厂(这只是一个小案例)。 您应该检查其他库(例如yoda time),或者如果您只需要像这样的简单计算,请自己完成。

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM