2016-01-07 3 views
1

Мне нужно разобрать строку до даты, скажем givenDate, до часового пояса EST. Кроме того, я должен взять текущую дату, скажем currentDate в часовом поясе EST. Мой текущий часовой пояс IST (GMT + 5: 30).разница между двумя датами в java в часовом поясе «EST»

Если 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 

Почему я получаю 6 для ДАТЫ, DAY_OF_MONTH, DAY_OF_YEAR? Я бы ожидать они должны вернуться 7, как данная дата 7 дней с момента запуска Года 2016.

Но если добавить следующую строку после первой строки кода выше, выше указанных полей возвращающегося 7 Что может быть причиной этого?

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

.

+1

Обновите свое сообщение конкретными примерами, охватывающими все возможные случаи, показывающие входы и ожидаемые выходы. –

ответ

1

Вы должны установить часовой пояс в класс SimpleDateFormat, а затем вы можете сравнить разобранную Дата текущее время:

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

Имейте в виду, что объект Дата отображается текущее время (количество секунд начиная с эпохи) в часовом поясе UTC.

+0

Но мне нужна текущая дата в часовом поясе EST. –

+1

Объект Date всегда представляет время в UTC независимо от того, как вы его получили. Даже givenDate в вашем примере находится в UTC. Часовой пояс вступает в силу только при анализе определенной даты/времени или при форматировании даты/времени. И текущее время (с нового объекта Date или Calendar) всегда корректно, независимо от вашего часового пояса. – Jason

Смежные вопросы