C++ 无UTC时区的正确时间和

C++ 无UTC时区的正确时间和,c++,time,mfc,timespan,C++,Time,Mfc,Timespan,我正在中欧用VisualStudio2010编程MFC 我有两个时间选择器,用来计算两个不同工作的持续时间 我使用CTime变量在这些控件中设置的时间进入我的代码 我还有一个编辑控件,它必须显示先前设置的两个选择器的总和 我的代码如下: CTime TimeJob1; CTime TimeJob2; CTimeSpan CTSTotalJobsTime, CTSJob1, CTSJob2; m_DTP_Job1. GetTime(TimeJob1); m_

我正在中欧用VisualStudio2010编程MFC

我有两个时间选择器,用来计算两个不同工作的持续时间 我使用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)之间存在差异

我错了吗?我如何解决这个问题

谢谢

编辑 我以以下方式初始化OnInitDialog()上的时间选择器:

CTime时间(1970,1,2,0,0,0)


这是我的解决方案:

我尝试使用CTimeSpan和日期时间选择器控件,但我发现它们对我不起作用,因为CTimeSpan参数为天、小时、分钟、秒,而我只对时间(无天)使用日期时间选择器

因此,当我将小时数设置为00时,由于UTF自动转换,我的CTimeSpan将日期更改为上一天,并将小时数设置为23


因此,我决定删除日期时间选择器,并使用3个不同的CEdit来表示小时、分钟、秒。

这是我的解决方案:

我尝试使用CTimeSpan和日期时间选择器控件,但我发现它们对我不起作用,因为CTimeSpan参数为天、小时、分钟、秒,而我只对时间(无天)使用日期时间选择器

因此,当我将小时数设置为00时,由于UTF自动转换,我的CTimeSpan将日期更改为上一天,并将小时数设置为23


因此,我决定删除日期-时间选择器,并使用3个不同的CEdit表示小时、分钟、秒。

状态为“A
\u time64\u t
时间值,即1970年UTC 1月1日之后的秒数。请注意,这将根据您的本地时间进行调整。”您是否尝试过任何其他构造函数?要以本地时间检索当前系统日期和时间,请使用GetLocalTime函数。不要将系统时间与UTC时间混在一起。状态为“A
\uu time64\u t
时间值,即1970年UTC 1月1日之后的秒数。请注意,这将调整为您的本地时间。“您是否尝试过任何其他构造函数?要检索本地时间中的当前系统日期和时间,请使用GetLocalTime函数。不要将系统时间与UTC时间混用。
m_DTP_Job1->SetTime(&timeTime);
m_DTP_Job2->SetTime(&timeTime);