2016-11-28 3 views
1

Я программирую MFC с Visual Studio 2010 в Центральной Европе.Правильная сумма времени без часовой пояс UTC

У меня есть 2 таймера, который я использую, чтобы получить продолжительность двух разных заданий , и я получаю на своем коде время, установленное в этих элементах управления, используя переменную CTime.

У меня также есть элемент управления редактирования, который должен отображать сумму двух ранее собранных сборщиков.

Мой код выглядит следующим образом:

CTime  TimeJob1; 
CTime  TimeJob2; 

CTimeSpan CTSTotalJobsTime, CTSJob1, CTSJob2; 

m_DTP_Job1.  GetTime(TimeJob1); 
m_DTP_Job2.  GetTime(TimeJob2); 

CTSJob1 = TimeJob1 - CTime(0); 
CTSJob2 = TimeJob2 - CTime(0); 

CTSTotalJobsTime = CTSJob1 + CTSJob2; 

CString strTotalJobsTime = CTSTotalJobsTime.Format(_T("%H:%M:%S")); 
m_EditTotalJobsTime.SetWindowText(strTotalJobsTime); 

Когда я редактирую контроль сборщика времени и известково сумму в два раза, кажется, что если у меня есть смещение на 1 час.

Я стараюсь объяснить в лучшем виде.

Если я установил продолжительность первого задания на 01:00:00 и второго задания 01:00:00, сумма времени в элементе управления редактирования 00:00:00.

Если я установил продолжительность первого задания на 02:00:00, а второго задания 02:00:00, сумма времени в элементе управления редактированием - 01:00:00.

Если я установил продолжительность первого задания на 05:00:00 и второго задания 01:00:00, сумма времени в элементе управления редактирования составляет 04:00:00.

Если я установил продолжительность первого задания на 02:00:00 и второго задания 04:00:00, сумма времени в элементе управления редактирования составляет 01:00:00.

Я полагаю, что это проблема из-за разницы между моим системным временем (UTC + 1) и временем UTC времени (0).

Я не прав? Как я могу решить эту проблему?

Благодаря

EDIT Я инициализировать свое время сборщика на OnInitDialog() таким образом:

CTime timeTime (1970, 1, 2, 0, 0, 0);

m_DTP_Job1->SetTime(&timeTime); 
m_DTP_Job2->SetTime(&timeTime); 
+0

В [документации] (https://msdn.microsoft.com/en-us/library/78zb0ese.aspx#ctime__ctime) указано значение времени «A__ __time64_t», которое представляет собой количество секунд после 1 января 1970 г. UTC. Обратите внимание, что это будет настроено на ваше местное время ». Вы пробовали какой-либо из других конструкторов? –

+0

Чтобы получить текущую системную дату и время по местному времени, используйте функцию GetLocalTime. Не смешивайте системное время с временем UTC. – seccpur

ответ

0

ЭТО МОЕ РЕШЕНИЕ:

Я пытался использовать CTimeSpan и контроль сборщика дата время, но я вижу, что они не работают для меня, потому что параметр CTimeSpan в день, часы, минуты , второй, в то время как я использую таймер выбора времени только для времени (без дней).

Так что, когда я установить часы на 00, благодаря автоматической конвертации UTF, мой день изменения CTimeSpan к previose один и установить часы на 23

Итак, я решил удалить сборщик даты и времени и использование 3 отличаются CEdit на часы, минуты, секунды.

Смежные вопросы