java中两个日期之间的差异' EST'时区

时间:2016-01-07 19:11:54

标签: java date calendar

我必须将一个字符串解析为日期,让我们说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()));
  

有没有更好的解决方案?

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

考虑代码段

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"));

1 个答案:

答案 0 :(得分: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时区中的当前时间(自纪元以来的秒数)。