无UTC时区中的正确时间总和

Correct time sum in no UTC timezone

本文关键字:时间 UTC 时区      更新时间:2023-10-16

我正在与中欧的Visual Studio 2010一起编程MFC。

我有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)。

之间的差异是一个问题。

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

谢谢

编辑我以这种方式在oninitdialog()上初始化了我的时间选择器:

ctime Timetime(1970,1,2,0,0,0,0);

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

这是我的解决方案:

我尝试使用ctimespan和日期选择器控制,但是我看到它们对我不起作用,因为ctimespan参数是日,小时,分钟,第二,我只使用时间选择器(没有时间))。

因此,当我将时间设置为00时,多亏了UTF自动转换,我的ctimespan将一天更改为previes over,并将时间设置为23。

所以,我决定删除日期时间选择器,并使用3个不同的cedit cedit,持续数小时,分钟,第二个。