Время UTC до GMT 2 в AS3

#actionscript-3 #datetime #date #utc #localtime

#actionscript-3 #дата и время #Дата #utc #местное время

Вопрос:

У меня проблема. Используя Date() функции, которые AS3 предоставляет изначально, я преобразую время UTC в локальное машинное время.

Проблема, с которой я столкнулся, заключается в следующем, посмотрите на month и hour .

 2011-10-07 18:45:00 -> 2011-10-07 21:45:00
2011-11-07 18:45:00 -> 2011-11-07 20:45:00
 

Вероятно, это связано с переходом на летнее время, но я подумал, что встроенные функции для обработки дат учитывают это.

Я прав, в этом проблема? Я должен сам учитывать переход на летнее время? Или это что-то другое?

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

1. UTC и GMT одинаковы … не уверен, что ты имеешь в виду?

2. Я имел в виду GMT 2. Местное время — GMT 2, но после 10-го месяца года все часы показывают на 1 час раньше. Я посмотрел зимнее время, и это происходит 31 октября. Наверное, так оно и есть. Но не уверен, как с этим справиться, поскольку я думал, что дата AS3 делает все даты мумбо-юмбо.

3. Сохраняете ли вы где — нибудь информацию о часовом поясе? Где выполняется код AS3 ? Работает ли он на компьютере с правильными настройками часового пояса?

4. Привет. Информация о часовом поясе берется с устройства. Он запускается на мобильном устройстве как приложение AIR.

Ответ №1:

Из документации по дате:

Класс Date обрабатывает переход на летнее время по-разному, в зависимости от операционной системы и версии среды выполнения… Объект Date определяет, используется ли летнее время в текущем языковом стандарте, и если это так, он определяет дату и время перехода от стандартного к летнему времени.

Исходя из этого, я полагаю, это означает, что объект Date будет определять летнее время для текущего времени. Если вы смотрите на дату в будущем, я думаю, вам нужно будет справиться со смещением самостоятельно.

Я использовал этот код в прошлом для учета летнего времени, найденного на computus.org:

 public static function getTimezone():Number
{
  // Create two dates: one summer and one winter
  var d1:Date = new Date( 0, 0, 1 )
  var d2:Date = new Date( 0, 6, 1 )
 
  // largest value has no DST modifier
  var tzd:Number = Math.max( d1.timezoneOffset, d2.timezoneOffset )
 
  // convert to milliseconds
  return tzd * 60000
}
 
public static function getDST( d:Date ):Number
{
  var tzd:Number = getTimezone()
  var dst:Number = (d.timezoneOffset * 60000) - tzd
  return dst
}
 

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

1. Хм, это интересно. Я проверю это завтра и вернусь. Спасибо.

2. Это сработало, спасибо. Я не уверен, хорошо ли это работает для других часовых поясов, кроме моего, но то, что я сделал, было: myDate.hours =1 getDST(converted)/MILLISECONDS_IN_A_DAY;

Ответ №2:

Если вы просто хотите вернуть значение даты 2 из UTC 0, используя оператор select, и учитывая, что вам не нужно обслуживать DLST, примером может быть Южная Африка, тогда для меня сработало следующее:

 SELECT [FieldA]
       ,DATEADD(hour,2([DateField])) AS [NewDate]
FROM [Table]