日期的轉換與比較

2021-05-23 05:14:56 字數 1826 閱讀 4301

前不久需要實現這樣乙個小功能,在啟動程式時檢查資料庫裡的日誌是否有超過指定時間(比如說90天)的,如果有則刪除這之前的日誌。該日誌是自己在使用軟體時記錄的一些操作。當時的想法就是獲取現在的日期,獲取資料庫裡日誌的日期。然而資料庫裡的日期卻是用字串儲存的,所以需要進行一些轉換。有好幾種轉換,下面就一一枚舉。

1. coledatetime dt;

dt.parsedatetime(strtime); // strtime 為資料庫裡記錄的時間,需要轉換

systemtime   systime; 

varianttimetosystemtime(dt, &systime);

ctime   tm(systime);

ctime curtime = ctime::getcurrenttime();

ctimespan tmspan = curtime - tm;

if (tmspan.getdays() > ndays) // 根據相差的天數做具體的操作,注意:這裡的天是要滿足24小時的,如果不滿24小時,即使過了凌晨24點還是不算一天。

2.int year,month,day,hour,minite,second;   // 這種方法直接分離字串構造為ctime

swscanf(strtime,_t("%d-%02d-%02d %02d:%02d:%02d"),&year,&month,&day,&hour,&minite,&second);

ctime time(year,month,day,hour,minite,second);

ctime curtime = ctime::getcurrenttime();

ctimespan tmspan = curtime - time;

if (tmspan.getdays() > ndays)

3.coledatetime   time1(1977,4,16,2,2,2);   //coledatatime---> ctime

systemtime   systime;

varianttimetosystemtime(time1,   &systime);

ctime   tm(systime);

time_t   time2=tm.gettime();   //ctime---> time_t

coledatetime   time3(time2);   //time_t---> coledatetime

coledatetime dt;

cstring strdate = "1987-7-12";

dt.parsedatetime( strdate );

dt 中已經儲存了指定的日期,它是 coledatetime 型別

實際後來才發現其實根本不用這樣處理,這樣處理效率不高,因為要多次查詢資料庫。因為我們比較的是天數,所以我們直接得到當前的日期,然後減去我們指定的日期,然後轉換為字串,刪除的時候用like就可以了。

ctime curtime = ctime::getcurrenttime();

int nyear = curtime.getyear();

int ncurmonth = curtime.getmonth();

if (ncurmonth < nmonth)

else

cstring strtime = _t("");

strtime.format(_t("%d-%02d-%02d"), nyear, ncurmonth, curtime.getday());

cstring strsql = _t("");

strsql = _t(" time like '%") + strtime + _t("%'");

關於日期和時間戳的轉換比較

pragma mark 將某個時間戳轉化成 時間 nsstring getdatestringwithtimestr nsstring str pragma mark 將字串日期轉換成想要格式的 nsdate void stringswitchdate pragma mark 兩個日期的時間差 返回...

日期的比較

本文 至 1.日期可以進行比較以確定大小或相等,也可以確定兩個日期之間的時間間隔。兩個日期的間隔時間差可以使用 timeintervalsincedate 方法來計算 nsdate now nsdate date nsdate anhourago now datebyaddingtimeinterv...

mysql與oracle 比較日期

select from cot gw main where create date to date 20150105 yyyymmdd 如上語句可能想查詢出建立日期在2015年1月5日那天或之前的,但實際上因為你的create date是date屬性的 當你將條件設定為2015年01月05號,而不設...