MFC中相關類:CTimeCTimeSpan COleDateTime COleDateTimeSpan API中相關時間處理函數(shù):SystemTimeToFileTimeFileTimeToSystemTime FileTimeToLocalTime SetLocalTime 具體請參閱msdn:Time Functions http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/time_functions.asp 這里再復習一下中學的地理。。@-@UTC是協(xié)調(diào)世界時(Universal Time Coordinated)英文縮寫,,是由國際無線電咨詢委員會規(guī)定和推薦,并由國際時間局(BIH)負責保持的以秒為基礎的時間標度。UTC相當于本初子 午線(即經(jīng)度0度)上的平均太陽時,過去曾用格林威治平均時(GMT)來表示.北京時間比UTC時間早8小時,,以1999年1月1日0000UTC為例, UTC時間是零點,,北京時間為1999年1月1日早上8點整,。GMT(Greenwich Mean Time)是格林尼治平均時: 由于地球軌道并非圓形,其運行速度又隨著地球與太陽的距離改變而出現(xiàn)變化,,因此視太陽時欠缺均勻性,。視太陽日的長度同時亦受到地球自轉(zhuǎn)軸相對軌道 面的傾斜度所影響。為著要糾正上述的不均勻性,,天文學家計算地球非圓形軌跡與極軸傾斜對視太陽時的效應,。平太陽時就是指經(jīng)修訂后的視太陽時。在格林尼治子 午線上的平太陽時稱為世界時(UT0),,又叫格林尼治平時(GMT),。 為了確保協(xié)調(diào)世界時與世界時(UT1)相差不會超過0.9秒,,有需要時便會在協(xié)調(diào)世界時內(nèi)加上正或負閏秒。因此協(xié)調(diào)世界時與國際原子時(TAI)之間會出現(xiàn)若干整數(shù)秒的差別,。位于巴黎的國際地球自轉(zhuǎn)事務中央局(IERS)負責決定何時加入閏秒,。 時間單位轉(zhuǎn)換1s(秒:Second) = 1000 ms(毫秒:millisecond)= 1000000 μs(微秒:microsecond) = 1000000000 ns(納秒:nanosecond) = 1000000000000 ps(皮秒) = 1000000000000000 fs(飛秒) 1.得到當前時間這里需要注意的是,GetLocalTime得到的是本地時區(qū)的時間,,而GetSystemTime是得到UTC時間,。COleDateTime odt = COleDateTime::GetCurrentTime(); String str = odt.Format("%Y-%m-%d %H:%M:%S"); COleDateTime::Format 的使用,請參閱msdn關于CTR庫中strftime, wcsftime的解釋 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_strftime.2c_.wcsftime.asp 2.在指定時間的基礎上,,加上或者減去一段時間后,,得到新的日期時間MFC:COleDateTime odt = COleDateTime::GetCurrentTime();//得到當前時間 COleDateTimeSpan odts; odts.SetDateTimeSpan(0, 15, 0, 0);//15個小時的時間差 odt += odts; CString str = odt.Format("%Y-%m-%d %H:%M:%S"); SDK: //FILETIME是以100納秒作為單位 //以下宏定義了1小時內(nèi)有多少個該單位 #define Nano100_SEC_IN_HOUR (ULONGLONG)60*60*10000000 SYSTEMTIME st; GetLocalTime(&st); FILETIME ft={0}; SystemTimeToFileTime(&st, &ft); ULARGE_INTEGER ui; ui.LowPart = ft.dwLowDateTime; ui.HighPart = ft.dwHighDateTime; ui.QuadPart += 16 * Nano100_SEC_IN_HOUR;//當前時間加上16個小時后的時間 ft.dwLowDateTime = ui.LowPart; ft.dwHighDateTime = ui.HighPart; FileTimeToSystemTime(&ft, &st); //st結(jié)構(gòu)體中的變量即最后結(jié)果 3.根據(jù)給定的日期,得到該日期的星期數(shù),,再得到該星期開始和結(jié)束的日期這個功能是當時幫一個mm的忙完成的,。。呵呵COleDateTime t1, tWeekBegin, tWeekEnd; t1.SetDate(2006,8,8); //這里需要注意的是西方人的習慣和我們不一樣,,他們把星期天當作每個星期的第一天,,如下面的函數(shù)GetDayOfWeek就是如此,所以我做了下面的一些轉(zhuǎn)換 int nXingQi = t1.GetDayOfWeek(); COleDateTimeSpan tsWeekBegin, tsWeekEnd; if ( 1 == nXingQi ) { tsWeekBegin.SetDateTimeSpan(6, 0, 0, 0); tsWeekEnd.SetDateTimeSpan(0, 0, 0, 0); } else { tsWeekBegin.SetDateTimeSpan(nXingQi-2, 0, 0, 0); tsWeekEnd.SetDateTimeSpan(8-nXingQi, 0, 0, 0); } tWeekBegin = t1 - tsWeekBegin; tWeekEnd = t1 + tsWeekEnd; CString str1 = tWeekBegin.Format("%Y-%m-%d"); CString str2 = tWeekEnd.Format("%Y-%m-%d"); 4. CString -> COleDateTimeCString str = "2006-09-04 11:22:33";COleVariant VariantTime; VariantTime = str; VariantTime.ChangeType(VT_DATE); COleDateTime DataTime = VariantTime; int nYear = DataTime.GetYear(); int nMonth = DataTime.GetMonth(); int nDay = DataTime.GetDay(); int nHour = DataTime.GetHour(); int nMin = DataTime.GetMinute(); int nSec = DataTime.GetSecond(); |
|
來自: scholes_goal > 《技術》