在没有UTC时区的情况下更正时间总和

时间:2016-11-28 15:27:13

标签: c++ time mfc timespan

我正在使用中欧的Visual Studio 2010编写MFC。

我有两个时间选择器,用于获得两个不同的工作的持续时间 然后我使用CTime变量获取在这些控件中设置的时间。

我还有一个编辑控件,必须显示之前设置的2个选择器的总和。

我的代码如下:

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)与时间(0)的UTC时间不同,我认为是一个问题。

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

由于

修改 我以这种方式在OnInitDialog()上初始化我的时间选择器:

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

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

1 个答案:

答案 0 :(得分:0)

这是我的解决方案:

我尝试使用CTimeSpan和日期时间选择器控件,但我看到它们不适合我,因为CTimeSpan参数是日,小时,分钟,秒,而我只使用日期时间选择器的时间(没有天) )。

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

所以,我决定删除日期时间选择器并使用3个不同的CEdit进行小时,分钟,秒。