java - 获取两个相同日期时间的长值会产生不同的值

标签 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. 2013-01-01 15:11:48 在您本地的时区(可能不是 GMT)
  2. 1-1-2013 15:11 GMT 位于 GMT 时区

因此,这两个日期的不同之处在于您所在时区和 GMT 之间的小时数。

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

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

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

关于java - 获取两个相同日期时间的长值会产生不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26178559/

相关文章:

java - Dr java keylistener 帮助对象在按键释放后移动

c# - 将C#中的DateTime转换为yyyy-MM-dd格式并存储到MySql DateTime字段中

mysql - SQL/Mysql查询数据库中可用日期

javascript - 如何让我的 HTML 表单日期输入仅允许使用 JavaScript、React 和 HTML 选择一周中的特定日期?

java - 如何删除默认边框以及如何锚定 jtable 的列标题?

java - Struts Action 中的多个入口点(迁移 Struts 2.2.3 -> 2.3.1)

java - Mybatis 返回不同的 T 类

bash - Perl Regex Query - 过滤文件中超过 18 个月的内容

php - 如何检查日期是否为 j-n-Y 格式?如果是的话如何将其转换为 d-m-Y 格式?

php - 如何制作带有 future 月份和日期的 PHP 日历?