Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/48: Рейтинг темы: голосов - 48, средняя оценка - 4.60
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
1

Как узнать часовой пояс UTC установленный на ПК

15.04.2014, 15:31. Показов 8809. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как узнать часовой пояс UTC установленный на ПК средствами C++ Builder XE?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2014, 15:31
Ответы с готовыми решениями:

Зная часовой пояс 'Europe/Kiev' - узнать смещение относительно UTC
Сайт работает в формате UTC. Мне нужно узнать время смещения пользователя в часах, если я знаю его...

Как узнать часовой пояс или время на компе пользователя ?
Требуется решение в части определения, какой часовой пояс (+ или - по отношению к Гринвичу, а может...

Узнать выбранный часовой пояс
Как узнать - какой часовой пояс выбран в системе (Екатеринбург, Москва и т.д.) ? А есть какая...

Узнать время в другой стране (другой часовой пояс)
Всем привет! Столкнулся с интересной задачей, которая позабавит и опытного программиста. К примеру...

10
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
15.04.2014, 16:28 2
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

глянь здесь

Добавлено через 7 минут
Собственно перевод из Делфи на Билдер
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
TDateTime UTCToLocalTime(TDateTime AValue) {
    // AValue - время UTC
    // Result - время с учётом локального GMT-смещения и правилами перехода на летнее время
    TSystemTime ST1, ST2;
    TTimeZoneInformation TZ;
 
    // TZ - локальные настройки Windows
    GetTimeZoneInformation(&TZ);
 
    // Преобразование TDateTime к WindowsSystemTime
    DateTimeToSystemTime(AValue, ST1);
 
    // Применение локальных настроек ко времени
    SystemTimeToTzSpecificLocalTime(&TZ, &ST1, &ST2);
 
    // Приведение SystemTime к TDateTime
    return SystemTimeToDateTime(ST2);
}
 
TDateTime LocalTimeToUTC(TDateTime AValue) {
    // AValue - локальное время
    // Result - время UTC
    TSystemTime ST1, ST2;
    TTimeZoneInformation TZ;
 
    // TZ - локальные (Windows) настройки
    GetTimeZoneInformation(&TZ);
    // т.к. надо будет делать обратное преобразование - инвертируем bias
    TZ.Bias = -TZ.Bias;
    TZ.StandardBias = -TZ.StandardBias;
    TZ.DaylightBias = -TZ.DaylightBias;
 
    DateTimeToSystemTime(AValue, ST1);
 
    // Применение локальных настроек ко времени
    SystemTimeToTzSpecificLocalTime(&TZ, &ST1, &ST2);
 
    // Приведение WindowsSystemTime к TDateTime
    return SystemTimeToDateTime(ST2);
}
1
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
16.04.2014, 12:36  [ТС] 3
Maluda, благодарю!

Немного переделал функции.
Для решения проблем со старыми датами начиная с Windows Vista советуют использовать GetTimeZoneInformationForYear вместо GetTimeZoneInformation

Этот участок кода:
C++
1
2
3
4
5
6
7
    // т.к. надо будет делать обратное преобразование - инвертируем bias
    TZ.Bias = -TZ.Bias;
    TZ.StandardBias = -TZ.StandardBias;
    TZ.DaylightBias = -TZ.DaylightBias;
 
    // Применение локальных настроек ко времени
    SystemTimeToTzSpecificLocalTime(&TZ, &ST1, &ST2);
Заменил на этот: TzSpecificLocalTimeToSystemTime
C++
1
2
    // Применение локальных настроек ко времени
    TzSpecificLocalTimeToSystemTime(&TZ, &ST1, &ST2);
C++
1
#include <DateUtils.hpp>
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
TDateTime UTCToLocalTime(TDateTime AValue) {
    // AValue - время UTC
    // Result - время с учётом локального GMT-смещения и правилами перехода на летнее время
    TSystemTime ST1, ST2;
    TTimeZoneInformation TZ;
 
    // TZ - локальные настройки Windows
    GetTimeZoneInformationForYear(YearOf(AValue), NULL, &TZ);
 
    // Преобразование TDateTime к WindowsSystemTime
    DateTimeToSystemTime(AValue, ST1);
 
    // Применение локальных настроек ко времени
    SystemTimeToTzSpecificLocalTime(&TZ, &ST1, &ST2);
 
    // Приведение SystemTime к TDateTime
    return SystemTimeToDateTime(ST2);
}
 
TDateTime LocalTimeToUTC(TDateTime AValue) {
    // AValue - локальное время
    // Result - время UTC
    TSystemTime ST1, ST2;
    TTimeZoneInformation TZ;
 
    // TZ - локальные (Windows) настройки
    GetTimeZoneInformationForYear(YearOf(AValue), NULL, &TZ);
 
    // Преобразование TDateTime к WindowsSystemTime
    DateTimeToSystemTime(AValue, ST1);
 
    // Применение локальных настроек ко времени
    TzSpecificLocalTimeToSystemTime(&TZ, &ST1, &ST2);
 
    // Приведение WindowsSystemTime к TDateTime
    return SystemTimeToDateTime(ST2);
}
Пример использования

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    TDateTime D;
    Memo1->Lines->Clear();
    D.Val = EncodeDate(2011, 1, 1).Val + Frac(Now());
    Memo1->Lines->Add(DateTimeToStr(D));                    // 01.01.2011 19:53:04
    Memo1->Lines->Add(DateTimeToStr(LocalTimeToUTC(D)));    // 01.01.2011 16:53:04
    Memo1->Lines->Add(DateTimeToStr(UTCToLocalTime(D)));    // 01.01.2011 22:53:04
 
    Memo1->Lines->Add("");
 
    D.Val = EncodeDate(2011, 6, 1).Val + Frac(Now());
    Memo1->Lines->Add(DateTimeToStr(D));                    // 01.06.2011 19:53:04
    Memo1->Lines->Add(DateTimeToStr(LocalTimeToUTC(D)));    // 01.06.2011 15:53:04
    Memo1->Lines->Add(DateTimeToStr(UTCToLocalTime(D)));    // 01.06.2011 23:53:04
0
Maluda
18.04.2014, 11:51
  #4

Не по теме:

QVO, а какую функцию использовать, когда депутаты отменяют переход на летнее-зимнее время :-)

0
D1973
18.04.2014, 16:44
  #5

Не по теме:

Цитата Сообщение от Maluda Посмотреть сообщение
какую функцию использовать, когда депутаты отменяют переход на летнее-зимнее время :-)
Наверное такую
C++
1
Deputats->Kill

0
QVO
18.04.2014, 20:00  [ТС]
  #6

Не по теме:

Maluda,

C++
1
GetTimeZoneInformationForYear

0
Maluda
18.04.2014, 20:24
  #7

Не по теме:

QVO, от депутатов эта функция не спасет, здесь только то, что D1973 предложил подходит.

0
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
18.04.2014, 21:43  [ТС] 8
Maluda,

Не по теме:

компания Windows не контролирует эти моменты? Россия это пол мира как никак, нужно считаться.

0
1280 / 598 / 116
Регистрация: 18.08.2009
Сообщений: 832
19.04.2014, 09:27 9

Не по теме:

Цитата Сообщение от QVO Посмотреть сообщение
Россия это пол мира как никак, нужно считаться
Это всего лишь 2% мирового населения



Добавлено через 4 минуты
Цитата Сообщение от QVO Посмотреть сообщение
// 01.01.2011 22:53:04
Цитата Сообщение от QVO Посмотреть сообщение
// 01.06.2011 23:53:04
Ну и в доказательство неверные значения, которые ты привел в примере. Так как если ты рассчитывал для России, то значения должны были бы быть одинаковыми, так как отменен переход на зимне-летнее время.
0
652 / 462 / 80
Регистрация: 26.10.2010
Сообщений: 1,263
Записей в блоге: 4
19.04.2014, 13:56  [ТС] 10

Не по теме:

Цитата Сообщение от Maluda Посмотреть сообщение
Это всего лишь 2% мирового населения
не думаю, что в африке, или где-то в южной америки у каждого стоит компьютер дома.




Maluda, это пример с делфи 1 февраля 2011 г.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  D: TDateTime;
begin
  Memo1.Lines.Clear;
  D := EncodeDate(2011, 1, 1) + Frac(Now);
  Memo1.Lines.Add(DateTimeToStr(D));                    // 01.01.2011 19:53:04
  Memo1.Lines.Add(DateTimeToStr(LocalTimeToUTC(D)));    // 01.01.2011 16:53:04
  Memo1.Lines.Add(DateTimeToStr(UTCToLocalTime(D)));    // 01.01.2011 22:53:04
 
  D := EncodeDate(2011, 6, 1) + Frac(Now);
  Memo1.Lines.Add(DateTimeToStr(D));                    // 01.06.2011 19:53:04
  Memo1.Lines.Add(DateTimeToStr(LocalTimeToUTC(D)));    // 01.06.2011 15:53:04
  Memo1.Lines.Add(DateTimeToStr(UTCToLocalTime(D)));    // 01.06.2011 23:53:04
end;
Добавлено через 6 минут
http://support.microsoft.com/gp/cp_dst/ru

Как ведущий разработчик и поставщик программного обеспечения, ИТ-услуг и решений, корпорация Microsoft принимает необходимые меры для обеспечения гладкого процесса изменения порядка исчисления времени в России, и окажет своим заказчикам и партнерам необходимые помощь и поддержку. Корпорация Microsoft готова сотрудничать с другими заинтересованными сторонами в решении проблем, обусловленных изменениями в исчислении времени в России.

На этом сайте представлены инструкции и дополнительные ресурсы, разработанные, чтобы помочь заказчикам и партнерам наилучшим образом адаптироваться к изменениям в исчислении времени в России.

9-ого августа 2011 г. корпорация Microsoft выпустила накопительное обновление для учета текущих изменений в порядке исчисления времени и разместила его для скачивания в Центре загрузки Microsoft. Это обновление содержит последние изменения, принятые в России. Описание состава изменений и адресов загрузки для всех поддерживаемых версий Windows представлено в статье в базе знаний Microsoft «Накопительное обновление для коррекции исчисления времени и определения часового пояса для операционных систем Windows за август 2011 г.». Начиная с 23-го августа 2011 г. это обновление также доступно через Центр обновления Windows.
Миниатюры
Как узнать часовой пояс UTC установленный на ПК  
0
volvo
19.04.2014, 14:11     Как узнать часовой пояс UTC установленный на ПК
  #11

Не по теме:

QVO, Майкрософту плевать на тех, кто у нее не покупает, а ворует продукты (ты много видел, чтобы у кого-то стояла лицензионная Windows у жителей постсоветского пространства? Сколько процентов пользователей из этих "полмира" легально купили продукт, чтобы мотивировать разработчиков хоть что-то для них сделать?) Мало того, то воруют, так еще и техподдержки требуют для их бредовых законодателей. Считаться с ними должны. Сейчас прямо...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.04.2014, 14:11

Как сменить часовой пояс на сайте?
Здравствуйте! У меня на форуме время отправки сообщения показываются + 2 часа. Как это можно...

Как изменить часовой пояс в системе?
Как изменить часовой пояс в системе средствами Delphi/WinAPI ? Например у меня стоит сейчас...

Как получить свой часовой пояс?
Написать программу получающую времи из инета не сложно. Но она вернёт время без 'смещения' в часах....

Как корректно менять часовой пояс сессии?
форумчане, подскажите как делать выборки в другом часом поясе? как корректно менять часовой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru