-
Уважаемые мастера. Надо сформировать строку из даты/времени с учетом с смещения по Гринвичу.
Интернет полон советами, как получить точное время по Гринвичу. Обычно так: var GlobalTime: TSystemTime; dGlobalTime : TDateTime; begin GetSystemTime(GlobalTime); dGlobalTime := SystemTimeToDateTime(GlobalTime); ....
Беда в том, что он возвращает время, отличное от компьютерного на ЧЕТЫРЕ часа. Хотя пояс установлен - Москва +03:00.
Я предположил, что он умеет определять переход на летнее время. Но если дату на машине поменять на февраль, разница по прежнему четыре часа. Почему?
И в связи с этим другой вопрос. Как правильно указывать в таких случаях - с учетом перехода на летнее время или без него. Всегда "+03:00"?
Спасибо.
-
GetTimeZoneInformation() Возвращает 3 часа
-
> Krok (03.04.2009 16:02:00) [0]
Так отгон на час назад не делает перехода на зимнее время. Четыре часа в наше время нормальное смещение для Москвы. Но не совсем понятно, что ты хочешь сделать и для какой цели?
-
> Krok (03.04.2009 16:33:01) [1]
GetTimeZoneInformation тоже правильно возвращает, он всегда будет возвращать -3 часа. Надо учитывать еще и переход на летнее время.
-
Так отгон на час назад не делает перехода на зимнее время. Я на месяц назад "отгонял". Но Вы правы - не переводит, похоже.
Задание: формировать строку вида «YYYY-MM-DD“T”HH24:MI:SSTZH:TZM»
Где YYYY – год MM – месяц DD – день T – латинская буква “T” HH24 – часы (от 0 до 24) MI – минуты SS - секунды TZH:TZM – сдвиг от Гринвича (зона), часы и минуты, обязательно со знаком сдвига (+ или -, для часовых поясов РФ – всегда +),
Насчет добавлять ли летнее время, видимо, надо будет выяснять дополнительно. А есть какие-нить "правильные" методы определения с какого момента летнее время, а с какого - зимнее? В смысле, ф-ции API.
-
> А есть какие-нить "правильные" методы определения с какого > момента летнее время, а с какого - зимнее? В смысле, ф-ции > API.
GetTimeZoneInformation
-
DaylightDate
A SYSTEMTIME structure that contains a date and local time when the transition from standard time to daylight saving time occurs on this operating system. If the time zone does not support daylight saving time or if the caller needs to disable daylight saving time, the wMonth member in the SYSTEMTIME structure must be zero. If this date is specified, the StandardDate member in this structure must also be specified. Otherwise, the system assumes the time zone data is invalid and no changes will be applied.
To select the correct day in the month, set the wYear member to zero, the wHour and wMinute members to the transition time, the wDayOfWeek member to the appropriate weekday, and the wDay member to indicate the occurrence of the day of the week within the month (1 to 5, where 5 indicates the final occurrence during the month if that day of the week does not occur 5 times).
If the wYear member is not zero, the transition date is absolute; it will only occur one time. Otherwise, it is a relative date that occurs yearly.
-
Спасибо
|