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

У меня проблема. Используя функции 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

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

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


person Francisc    schedule 25.10.2011    source источник
comment
UTC и GMT - это ОДИНАКОВО... не уверен, что ты имеешь в виду?   -  person Yahia    schedule 25.10.2011
comment
Я имел в виду GMT+2. Местное время — GMT+2, однако после 10-го месяца года все часы показываются на 1 час раньше. Я посмотрел зимнее время, и это происходит 31 октября. Это, наверное, все. Но не уверен, как с этим справиться, так как я думал, что дата AS3 делает всю ерунду с датами.   -  person Francisc    schedule 25.10.2011
comment
Вы где-нибудь сохраняете информацию о часовом поясе? Где работает код AS3? Работает ли он на машине с правильными настройками TimeZone?   -  person Yahia    schedule 25.10.2011
comment
Привет. Информация о часовом поясе берется с устройства. Он запускается на мобильном устройстве как приложение AIR.   -  person Francisc    schedule 26.10.2011


Ответы (2)


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

Класс 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
}
person Corey    schedule 25.10.2011
comment
Хм, это интересно. Я проверю это завтра и вернусь. Спасибо. - person Francisc; 26.10.2011
comment
Это сработало, спасибо. Я не уверен, что это хорошо работает для других часовых поясов, но я сделал следующее: myDate.hours+=1+getDST(converted)/MILLISECONDS_IN_A_DAY; - person Francisc; 27.10.2011

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

SELECT [FieldA]
       ,DATEADD(hour,2([DateField])) AS [NewDate]
FROM [Table]
person stephenmh83    schedule 29.09.2016