2015-02-20 1 views
0

Когда я исполняю ниже фрагмент кодаКалендарный часовой пояс, как он работает?

public static void main(String[] args) { 
     TimeZone timeZoneInd = TimeZone.getTimeZone("Asia/Calcutta"); 
     TimeZone timeZoneAus = TimeZone.getTimeZone("Australia/Adelaide"); 

     Calendar calendarInd = Calendar.getInstance(timeZoneInd); 
     Calendar calendarAus = Calendar.getInstance(timeZoneAus); 

     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy-HH:mm:ss SSSS"); 

     System.out.println("Australian time now :" + sdf.format(calendarAus.getTime())); 
     System.out.println("Indian time now  :" + sdf.format(calendarInd.getTime())); 

    } 

Почему оба значения одинаковы? Должно ли каждое время печати соответствовать его часовому поясу?

+0

Возможный дубликат [SimpleDateFormat parse теряет часовой пояс] (http://stackoverflow.com/questions/18122608/simpledateformat-parse-loses-timezone) – Joe

ответ

1

Это потому, что время в каждом объекте Calendar одинаково. Если вы хотите форматировать даты для разных часовых поясов, вам нужно будет установить часовой пояс в объекте формата, например:

TimeZone timeZoneInd = TimeZone.getTimeZone("Asia/Calcutta"); 
TimeZone timeZoneAus = TimeZone.getTimeZone("Australia/Adelaide"); 

SimpleDateFormat formatInd = new SimpleDateFormat("dd/MM/yyyy-HH:mm:ss SSSS"); 
formatInd.setTimeZone(timeZoneInd); 
SimpleDateFormat formatAus = new SimpleDateFormat("dd/MM/yyyy-HH:mm:ss SSSS"); 
formatAus.setTimeZone(timeZoneAus); 

Calendar calendarInd = Calendar.getInstance(timeZoneInd); 
Calendar calendarAus = Calendar.getInstance(timeZoneAus); 

System.out.println("Australian time now :" + formatAus.format(new Date())); 
System.out.println("Indian time now  :" + formatInd.format(new Date())); 

calendarAus.set(Calendar.HOUR_OF_DAY, 12); 
calendarInd.set(Calendar.HOUR_OF_DAY, 12); 

System.out.println("Australian time at noon :" + formatAus.format(calendarAus.getTime())); 
System.out.println("Indian time at noon  :" + formatInd.format(calendarInd.getTime())); 

Это для меня дает следующий результат:

  • австралийское время сейчас: 20/02/2015-23: 00: 51 0081
  • Индийское время сейчас: 20/02/2015-18: 00: 51 0082
  • Австралийское время в полдень: 20/02/2015-12: 00 : 51 0081
  • Индийское время в полдень: 20/02/2015-12: 00: 5 1 0081

Вы должны использовать SimpleDateFormat для форматирования даты вашего путешествия, то Calendar объект должен быть использован для работы с датами.

+0

Странно !! Форматировщик должен только форматировать ... Что это связано с часовыми поясами? Я думал, что calendar.getTime() будет возвращать разные объекты Date на основе их часовых поясов. Похоже, это не так! –

+0

Теперь я получаю его, часовой пояс не обязательно связан с календарным объектом вообще, выглядит так же, как и объекты System.currentTimeInMillis() Date не зависят от Timezones. Благодаря :) –

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