久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C++時間處理總結(jié)

 scholes_goal 2011-03-23

MFC中相關類:   

    CTime 
    CTimeSpan
    COleDateTime
    COleDateTimeSpan

API中相關時間處理函數(shù):

    SystemTimeToFileTime
    FileTimeTo
SystemTime
    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 -> COleDateTime

    CString 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();

    本站是提供個人知識管理的網(wǎng)絡存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多