2016-11-28 2 views
1

中央ヨーロッパでVisual Studio 2010でMFCをプログラミングしています。UTCタイムゾーンなしで正しい時間の合計

私は2つの異なるジョブの継続時間を取得するために使用する2時間ピッカーを持っています。私はこれらのコントロールでCTime変数を使用して設定された時間を自分のコードに入れます。

また、以前に設定した2つのピッカーの合計を表示する編集コントロールもあります。

私のコードは以下の通りです:私は、時間ピッカーコントロールを編集し、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に設定し、2番目のジョブ01:00:00を設定すると、編集コントロールの時間の合計は00:00:00になります。

最初のジョブの継続時間を02:00:00に設定し、2番目のジョブを02:00:00に設定した場合、編集コントロールの時間の合計は01:00:00になります。

最初のジョブの継続時間を05:00:00に設定し、2番目のジョブ01:00:00を設定すると、編集コントロールの時間の合計は04:00:00になります。

最初のジョブの継続時間を02:00:00に設定し、2番目のジョブ04:00:00を設定すると、編集コントロールの時間の合計は01:00:00になります。

システム時刻(UTC + 1)と時刻(0)のUTC時刻の違いによる問題があると考えます。

私は間違っていますか?どうすればこの問題を解決できますか?

おかげ

EDIT 私はこの方法でのOnInitDialog()で私の時間ピッカーを初期化します。

はCTime timeTime(1970、1、2、0、0、0);

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

[documentation](https://msdn.microsoft.com/en-us/library/78zb0ese.aspx#ctime__ctime)には、「1970年1月1日以降の秒数を示す '__time64_t'時間値UTC。これは現地時間に調整されることに注意してください。他のコンストラクタを試しましたか? –

+0

現在のシステム日付と時刻を現地時間で取得するには、GetLocalTime関数を使用します。システム時間とUTC時間を混在させないでください。 – seccpur

答えて

0

これは私のソリューションです:

私はCTimeSpan、日付時刻ピッカーコントロールを使用しようとしましたが、私はCTimeSpanパラメータは一日であるため、彼らは私のために動作しないことがわかり、時間、分、秒私は時間のピッカーだけ時間(日なし)を使用しています。

ので、私は00で時間を設定すると、UTF自動変換のおかげで、私のCTimeSpan変更日previose 1へとだから、23

に時間を設定し、私は、日付時刻ピッカーと使用を削除することにしました3時間、分、秒のCEditは異なります。

関連する問題