【问题标题】:difference between two dates in java in 'EST' time zone'EST'时区java中两个日期之间的差异
【发布时间】:2016-01-07 19:11:54
【问题描述】:

我必须将字符串解析为日期,比如givenDate,到 EST 时区。 另外,我必须取当前日期,让我们在 EST 时区说currentDate。 我当前的时区是 IST (GMT+5:30)。

如果 currentDate 大于 givenDate,那么我需要在 currentDate 中添加一天。

这是我实施的解决方案。

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Calendar givenDate = Calendar.getInstance(TimeZone.getTimeZone("EST"));
givenDate .setTime(df.parse("01/08/2016"));

Calendar currentDate = Calendar.getInstance(TimeZone.getTimeZone("EST"));
if(currentDate.get(Calendar.YEAR) > givenDate .get(Calendar.YEAR) ||
            currentDate.get(Calendar.DAY_OF_YEAR) > givenDate.get(Calendar.DAY_OF_YEAR)){
        currentDate.add(Calendar.DATE, 1);
}

System.out.println("Final date : "+df.format(currentDate.getTime()));

有没有更好的解决方案?

此外,以下内容一直困扰着我。

考虑代码sn-p

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");   
Calendar givenDate = Calendar.getInstance(TimeZone.getTimeZone("EST"));
givenDate .setTime(df.parse("01/07/2016"));
System.out.println(givenDate .get(Calendar.DATE));         //6       
System.out.println(givenDate .get(Calendar.DAY_OF_MONTH)); //6
System.out.println(givenDate .get(Calendar.DAY_OF_YEAR));  //6

为什么我在 DATE、DAY_OF_MONTH、DAY_OF_YEAR 得到 6?我希望 他们必须返回 7 因为给定的日期是从开始的 7 天 2016 年。

但是如果我在上面代码的第一行之后添加以下行,上面提到的字段返回 7。这可能是什么原因?

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

.

【问题讨论】:

  • 请用涵盖所有可能情况的具体示例更新您的帖子,显示输入和预期输出。

标签: java date calendar


【解决方案1】:

你需要在SimpleDateFormat类中设置时区,然后你可以将解析后的Date与当前时间进行比较:

SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
df.setTimeZone(TimeZone.getTimeZone("EST"));
Date givenDate = df.parse("01/08/2016");

Calendar currentDate = Calendar.getInstance();

if(currentDate.getTime().compareTo(givenDate) > 0) {
    currentTime.add(Calendar.DATE, 1);
}

请记住,Date 对象表示 UTC 时区中的当前时间(自纪元以来的秒数)。

【讨论】:

  • 但我需要 EST 时区的当前日期。
  • 无论您是如何获得的,Date 对象始终表示 UTC 时间。即使您的示例中的 givenDate 也是UTC。时区仅在您从特定日期/时间解析或格式化日期/时间时生效。无论您的时区如何,当前时间(来自新的 Date 或 Calendar 对象)始终是正确的。
猜你喜欢
  • 1970-01-01
  • 2012-04-09
  • 2011-03-19
  • 1970-01-01
  • 2011-03-20
  • 2023-03-24
  • 1970-01-01
  • 2011-10-29
  • 2012-10-23
相关资源
最近更新 更多