Гибкое преобразование часовых поясов

#apache-flex

#apache-гибкий

Вопрос:

Как преобразовать дату и время в часовой пояс CDT в flex4

С уважением, Сушма

Ответ №1:

Объект Date во Flash всегда устанавливается в соответствии с настройками времени компьютера. Если компьютер уже находится в часовом поясе CDT, то будет достаточно просто получить любое свойство от объекта. Однако, если вы хотите выполнить «преобразование» часового пояса в часовой пояс, на который компьютер не настроен, вы можете получить время UTC и сместить его следующим образом:

 var date:Date = new Date();
var timezone:int = -5;
date.hours = date.hoursUTC   timezone;
  

Однако вы пытаетесь получить фактическое время CDT, которое работает только летом в определенных районах. Для этого Flash невозможно точно узнать, когда это произойдет, ЕСЛИ вы не закодируете исключения (т. Е. если между этой датой и той датой, сделайте -6, в противном случае сделайте -5), и вам также необходимо знать фактическое местоположение пользователя (что невозможно с помощью Flash, если пользователь не предоставит вам эту информацию).

Могу я спросить, зачем вам нужно знать такую вещь?

Комментарии:

1. Жесткое кодирование смещения предполагает, что пользователь находится в CDT, и в этом случае преобразование не потребуется. Текущее смещение доступно в Date.timezoneOffset() , и для получения местного времени в UTC доступны методы UTC.

2. эмм, я уже упоминал об этом? Я даже спросил его, каковы были его намерения относительно этого кода, поскольку может быть лучший способ сделать это. Может быть, если бы вы потрудились сначала прочитать…

3. То, что я прочитал, было кодом, который использовал локальную дату и время и смещал их для CDT; это не сработает, если пользователь не находится в UTC 0. Если вы установили date значение UTC, то да, я согласен, что ваш подход и вопросы разумны: получение UTC не является проблемой, но получение эквивалента центрального времени требует дополнительной работы (это может быть сделано на основе текущих правил DST, но будет применимо только до тех пор, пока правила не изменятся).

4. Как вы думаете, что date.hours = date.hours date.timezoneOffset timezone; делает? Для этого используется местный час, удаляется смещение местного часового пояса (так что ваши часы теперь указаны в UTC), затем добавляется смещение CDT. На самом деле, теперь, когда я думаю об этом, я мог бы просто использовать часы UTC с самого начала. Мне нужно еще кофе. Тем не менее, ваш -1 неоправдан.

5. timezoneOffset выполняется в считанные минуты, поэтому я думаю, что ваше текущее решение лучше. Теперь я думаю, что причина OP для этого определит, сколько настроек необходимо: если это для жителей США в рабочее время, я думаю, это все, что вам нужно, но в противном случае может потребоваться больше кода… если hoursUTC меньше 5, то при вычитании смещения для CDT будет выдана ошибка, поэтому в этом случае вам придется скорректировать как часы, так и дату.