Java:将Date.getTime与另一个日期进行比较

时间:2014-12-16 16:54:33

标签: java date unix-timestamp

日期date1的格式为YY-MM-dd hh:mm:ss.SSS 我想比较

date1.getTime()

通过执行

检索
new Date().getTime()

SimpleDateFormat sf = new SimpleDateFormat("YY-MM-dd hh:mm:ss.SSS");
Date date1 = sf.parse(date1AsString);
...
compare date1.getTime() with new Date().getTime();

如何将这两个日期带到一个共同的时区'比较它们? 如何获得date1在相同的时间长度'作为新的日期()?我想拥有相同的时区...... 感谢

7 个答案:

答案 0 :(得分:1)

来自Date

javadoc
  

Date表示特定的时刻,精确到毫秒。

时间实例与我们对时区增强的时间定义无关。 现在对您和我来说都是一样的,无论我们(可能)在不同的时区。

添加时区概念的是DateFormat

  

日期表示为Date对象或自1970年1月1日00:00:00 GMT以来的毫秒数。

当你调用Date#getTime()时,你会回来

  

自此Date对象所代表的1970年1月1日00:00:00 GMT以来的毫秒数。

这可以用来比较Date个对象,因为它们具有相同的根。同样,compareTo将返回

  

如果参数Date等于此Date,则值为0;一个值   如果DateDate参数之前,则小于0;和一个价值   如果Date在Date参数之后,则大于0。

答案 1 :(得分:1)

如果他们的时区信息未知,则无法比较两个日期。

例如,如果您的date1AsString变量只是2014-12-16 16:00:00,那么您无法判断它是否大于或小于2014-12-16 20:00:00+0000

看起来第一个日期比第二个日期少4个小时;但如果有人补充说第一个日期是太平洋时间(UTC-0800),那么它实际上比第二个日期(2014-12-16 16:00:00-0800 = 2014-12-17 00:00:00+0000)多4个小时。

因此,如果date1AsString的时区未知,则无法将其转换为UTC或其他任何内容进行比较。

答案 2 :(得分:0)

getTime()返回自1970年1月1日00:00:00以来的毫秒数。您需要比较两个long,大致如下:

long time = new Date().getTime();
long time2 = date1.getTime();
if(time>time2)
    System.out.println(String.format("time is greater than time2 by %d", time-time2)
else
    System.out.println(String.format("time2 is greater than time by %d", time2-time)

答案 3 :(得分:0)

如果你知道时区 date1.setTime(date1.getTime()+/-(3600000 *小时))转换,如果date1时间是格林威治标准时间转到GMT + 2小时必须是2并且唱歌必须是+

答案 4 :(得分:0)

通常任何服务器环境都将使用GMT,因此您在比较日期时不必担心时区,只有在格式化要显示给用户的值时才会这样。

您可以比较两个日期:

SimpleDateFormat sf = new SimpleDateFormat("YY-MM-dd hh:mm:ss.SSS");
Date date1 = sf.parse(date1AsString);

boolean isBefore = date1.before(new Date());
boolean isAfter = date1.after(new Date());

或者,您可以比较unix时间的数值以获得相同的结果:

...

boolean isBefore = date1.getTime() < new Date().getTime();
boolean isAfter = date1.getTime() > new Date().getTime();

答案 5 :(得分:-1)

Date类包含before(date)after(date)等方法。您应该查看Date类。

答案 6 :(得分:-1)

所以我认为你要找的是设置SimpleDateFormat的时区:

sf.setTimeZone(TimeZone.getTimeZone("EST"));