2013-02-08 4 views
0

У меня есть объект календаря, который находится в часовом поясе UTC. Я хочу преобразовать дату и время в этом объекте Calendar в PST с учетом всего DST. Я ищу, чтобы написать вспомогательную функцию со следующей подписью:Календарь Объект Преобразование временной зоны

private Calendar getPSTTime(Calendar utcTime) 
{ 

} 
+0

Там нет нужно указать «язык программирования Java» в названии; вы включили в него тег, и система тегов здесь очень хорошо работает без какой-либо помощи. Любая информация, которую вы можете предоставить с тегами, не требуется в теме, и вы можете использовать пространство, чтобы лучше описать свой вопрос. (Вы также обычно должны * задавать вопрос * вместо того, чтобы просто указывать цель, и показать некоторые усилия, которые вы предприняли при самом решении проблемы самостоятельно.) –

+0

Также обман [Как обрабатывать календарные часовые пояса с использованием Java?] (http://stackoverflow.com/q/230126/62576), [Преобразование времени UTC в локальный часовой пояс в Java] (http://stackoverflow.com/questions/3010035/converting-a-utc-time-to -a-local-time-zone-in-java?), [Преобразование даты с UTC на PST в Java] (http://stackoverflow.com/questions/6075912/converting-date-from-utc-to-pst- in-java? rq = 1) и несколько других. Пожалуйста, по крайней мере, сделайте основной поиск здесь, прежде чем отправлять вопрос, чтобы узнать, уже ли он задан и ответил. Некоторые из тех, кого я связал, находятся в списке «Related» справа. Благодарю. –

+0

Я действительно искал существующие сообщения. Это не помогло мне. Мой вопрос конкретный. Кроме того, я не знаю, как лучше я могу описать эту функцию. Я дал подпись метода. Люди, которые написали код Java, должны понимать, чего я пытаюсь достичь. – supreethmurthy

ответ

1
private Calendar getPSTTime(Calendar utcTime) 
{ 
    TimeZone americaPacific = TimeZone.getTimeZone("America/Los_Angeles"); 
    Calendar pacificTime = Calendar.getInstance(americaPacific); 
    pacificTime.setTime(utcTime.getTime()); 
    return pacificTime; 
} 

FYI: Все доступные временные идентификаторы зоны Струнные возвращаются методом TimeZone.getAvailableIDs(). Вот где я получил "America/Los_Angeles".

+0

Это было первое, что я пробовал. Для этого просто установите время UTC. Он не будет конвертировать время в PST. Благодарю. – supreethmurthy

+0

@ user2055876 Попробуйте, может быть, 'TimeZone.getTimeZone (" PST ");'. Также как вы проверили, что этот метод не работает (он отлично работает для меня)? Общей ошибкой является то, что люди проверяют ее, печатая 'calendar.getTime()', которая возвращает 'new Date (milis)' на основе миллисекунд, которые хранятся в календаре, забывая, что 'Date' использует локаль по умолчанию. Чтобы проверить правильность преобразования календаря, получите значения непосредственно из него, например 'calendar.get (Calendar.HOUR_OF_DAY);'. – Pshemo

0

Время события в Java хранится как количество миллисекунд между этим событием и 1 января 1970, 00:00:00 GMT (например, как если бы это произошло в Лондоне)

Поэтому, когда мы говорим дату и время в Java, представленный java.util.Date или java.util.Calendar, мы всегда говорим об абсолютном числе, независимо от часового пояса.

Часовой пояс имеет смысл только тогда, когда мы пытаемся вывести дату/время в виде строки. На верхней части моей головы, я могу вспомнить два способа сделать это:

  • использовать календарь, установить часовой пояс, используйте метод Get (Calendar.XXX), чтобы получить индивидуальную дату/время компонента в часовом поясе вы хотите
  • использовать SimpleDateTimeFormat, установить часовой пояс, формат всей даты/время в одну строку в часовом поясе вы хотите

там действительно нет такого понятия, как «время преобразования зоны» в Java, но есть временная зона конкретное форматирование.

Однако, если вы хотите, чтобы сделать вещи действительно сбивает с толку, вы можете добавить «коррекцию» к календаря значения времени, так что он будет возвращать значения полей, как если бы это было в PST часовой пояс:

private Calendar getPSTTime(Calendar utcTime) 
{ 
    TimeZone pstZ = TimeZone.getTimeZone("America/Los_Angeles"); 
    long offset = pstZ.getOffset(utcTime.getTime()); 
    Calendar pacificTime = Calendar.getInstance(); 
    pacificTime.setTimeInMillis(utcTime.getTimeInMillis()-offset); 
    return pacificTime; 
} 
Смежные вопросы