Windows CE用のVisual C++の標準関数には、time.tに存在する関数群が欠落している… こんな基本的な関数が欠落してるのでは、既存のC++からの移植が出来ないではないか。 時間の計算は、自分で新規クラスを作ってやれということか?
オープンソースの互換関数「OpenTimeCE」が公開されているが、納品するプログラムにそういうのを使ってよいはずが無い。(ライセンス上問題がある可能性がある)
ということで、仕方なくCTime標準クラスで代用することにする。
CTime tmTime1, tmTime2;
CTimeSpan tmSpan;
SYSTEMTIME tmSystime;
/* コンストラクタを用いた、即値の代入 */
// 年月日・時分秒の代入
tmTime1 = CTime(nYear, nMonth, nDay, nHour, nMinutes, nSecond);
// SYSTEMTIME構造体の代入
::GetLocalTime(&tmSystime);
tmTime1 = CTime(tmSystime);
/* 現在日時を得る */
tmTime1 = CTime::GetCurrentTime();
/* 時間の加算・減算 */
// CTimeSpan = CTime ± CTime
tmSpan = tmT1 - tmT2; // 得られるtmSpan は秒単位
// CTime = CTime ± CTimeSpan
tmT2 = tmT1 - CTimeSpan(0, -9, 0, 0); // 9時間差を計算
tmT2 = tmT1 - CTimeSpan(-9*60*60); // 9時間差を計算
ちなみに、デバッグする時に非常に見づらいです。 struct tm は、構造体に年・月… と区分けされてセットされているので、トレース実行時に年・月… と確認しながらトレースできる。 CTimeは、long int の値が一つだけ見えるだけで、年にアクセスするには CTime.GetYear() という関数を呼ぶ必要性がある。 せめて、メンバ変数 CTime.m_Year とかにしてほしかった…
時間関数のメモ
time.h | Win32 | MFC |
struct tm tm0; tm0.tm_year = nYear - 1900; tm0.tm_mon = nMonth -1; tm0.tm_mday = nDay; tm0.tm_hour = nHour; tm0.tm_min = nMinute; tm0.tm_sec = nSecond; time_t tm1; tm1 = mktime(&tm0); |
CTime tm; tm = CTime(nYear, nMonth, nDay, nHour, nMinute, nSecond); | |
time_t tm1; struct tm *ptm0; ptm0 = localtime(&tm1); nYear = ptm0->tm_year + 1900; nMonth = ptm0->tm_mon + 1; nDay = ptm0->tm_mday; nHour = ptm0->tm_hour; nMinute = ptm0->tm_min; nSecond = ptm0->tm_sec; |
SYSTEMTIME tm; nYear = tm.wYear; nMonth = tm.wMonth; nDay = tm.wDay; nHour = tm.wHour; nMinute = tm.wMinute; nSecond = tm.wSecond; |
CTime tm; |
time_t tm; |
SYSTEMTIME tm; ::GetLocalTime(&tm); |
CTime tm; |
SYSTEMTIME tm; ::SetLocalTime(&tm); |
||
TIME_ZONE_INFORMATION tzInfo; GetTimeZoneInformation(&tzInfo); nMinutes = tzInfo.Bias; |
||
time_t tm1, tm2, tmdiff; |
CTime tm1, tm2; CTimeSpan tmdiff; tmdiff = tm1 - tm2; | |
time_t tm1, tm2; // 9時間時差を計算する tm2 = tm1 + 9*60*60; |
CTime tm1, tm2; // 9時間時差を計算する tm2 = tm1 + CTimeSpan(0,9,0,0); | |
// struct tm -> CTime CTime tmC; struct tm tmS; tmC = CTime(mktime(&tm0)); |
// SYSTEMTIME -> CTime SYSTEMTIME tmS; CTime tmC; tmC = CTime(&tmS); |
// CTime -> struct tm CTime tmC; struct tm *ptmS; ptmS = tmC.GetLocalTm(NULL); |
// time_t -> CTime; CTime tmC; time64_t tmT; tmC = CTime(tmT); |
// CTime -> SYSTEMTIME SYSTEMTIME tmS; CTime tmC; tmC.GetAsSystemTime(&tmS); |
// CTime -> time_t CTime tmC; time64_t tmT; tmT = tmC.GetTime(); |