获得两个相等日期时间的长值会产生不同的值

时间:2014-10-03 12:00:36

标签: java date calendar

我想在MapReduce缩减端连接程序中使用日期时间作为键。表A的值为2013-01-01 15:11:48,表B的值为1-1-2013 15:11 GMT

我正在解析A:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //2013-01-01 15:11:48
Calendar cal = Calendar.getInstance();
cal.setTime(df.parse(split[TaxiFields.PICKUP_DATETIME]));
cal.set(Calendar.SECOND, 0); //disconsidering the seconds
pickupDatetime.set(cal.getTime().getTime());

我正在解析B:

DateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm zzz"); //1-1-2013 15:11 GMT,
Calendar cal = Calendar.getInstance();
cal.setTime(df.parse(split[0]));
cal.set(Calendar.SECOND, 0);
rainDate.set(cal.getTime().getTime());

然而,第一个给我1357063860000作为结果,而第二个给了我1357053060000

我缺少什么?我尝试将时区设置为默认值(cal.setTimeZone(TimeZone.getDefault());),但它不起作用。

由于

1 个答案:

答案 0 :(得分:2)

您没有使用两个相等日期时间。你有:

    您当地时区的
  1. 2013-01-01 15:11:48(可能不是GMT)
  2. 1-1-2013 15:11 GMT位于GMT时区
  3. 因此,这两个日期因您的时区与GMT之间的小时数而异。

    您可以解析第一个日期,就像它在GMT时区一样:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 2013-01-01 15:11:48
    df.setTimeZone(TimeZone.getTimeZone("GMT"));
    

    如果您这样做,您将获得两个日期时间相同的值(1357053060000