時間與日期類封裝

2021-07-06 04:47:11 字數 4097 閱讀 9118

在ios開發時,會經常用到一些處理時間的函式和方法,比如求當前時間,計算兩個日期差幾天,格式化現在時間與給定的秒數的時間差等。

所以就整理並歸納了一些比較實用的方法。

主要用到的類有: nsdate, nsdateformatter, nscalendar, nsdatecomponents, nstimeinterval,

#import

@inte***ce cxztimeutil : nsobject

/** * 得到單例

*t * @return 單例的物件

*/+ (id)getinstance;

/** * 得到當前時區的時間,一般為北京時間

* * @return nsdate物件

*/- (nsdate *)datenow;

/** * 獲取自2023年到現在的秒數

* * @return 秒數

*/- (nsinteger)currentsecond;

/** * 獲取自2023年到現在的毫秒數

* * @return 毫秒數

*/- (long

long)currentmsec;

/** * 獲取當前的日期物件

* * @return 日期物件

*/- (nsdatecomponents *)currentdatecompoent;

/** * 通過給定的nsdate得到日期物件

* * @param date nsdate

* * @return 日期物件

*/- (nsdatecomponents *)datecompoentfromdate:(nsdate *)date;

/** * 獲取某年某月最大天數

* * @param year 年份

* @param month 月份

* * @return 天數

*/- (nsinteger)maxdayforyear:(nsinteger *)year month:(nsinteger)month;

/** * 通過制定的引數獲取nsdate物件

* * @param year 年

* @param month 月

* @param day 日

* @param hour 時

* @param monute 分

* @param second 秒

* * @return nsdate物件

*/- (nsdate *)datefromyear:(nsinteger)year month:(nsinteger)month day:(nsinteger)day hour:(nsinteger)hour minute:(nsinteger)minute second:(nsinteger)second;

/** * 通過components獲取nsdate物件

* * @param components nsdatecomponents型別

* * @return nsdate物件

*/- (nsdate *)datefromcomponents:(nsdatecomponents *)components;

/** * 通過秒數來獲取時間字串

* * @param second 自2023年開始的秒數

* * @return 時間字串

*/- (nsstring *)datestringfromsecond:(nsinteger)second;

/** * 得到date之後或之前的日子,正表示之後,負表示之前

* * @param date 基準時間

* @param year 年

* @param month 月

* @param day 日

* * @return 計算之後的日期

*/- (nsdate *)dateafterfromdate:(nsdate *)date withyear:(nsinteger)year month:(nsinteger)month day:(nsinteger)day;

/** * 計算兩個日期差幾天

* * @param date1 日期1

* @param date2 日期2

* * @return 差的天數

*/- (nsinteger)differencefromdate:(nsdate *)date1 todate:(nsdate *)date2;

/** * 格式化現在時間與給定的秒數的時間差

* * @param second 自2023年開始的秒數

* * @return 格式化後的字串

*/- (nsstring *)formatdifferencetonowfromsecond:(nsinteger)second;

@end

}

#import "cxztimeutil.h"

@implementation

cxztimeutil

+ (id)getinstance );

return singleton;

}- (nsdate *)datenow

- (nsinteger)currentsecond

- (long

long)currentmsec

- (nsdatecomponents *)currentdatecompoent

- (nsdatecomponents *)datecompoentfromdate:(nsdate *)date

- (nsinteger)maxdayforyear:(nsinteger *)year month:(nsinteger)month

- (nsdate *)datefromyear:(nsinteger)year month:(nsinteger)month day:(nsinteger)day hour:(nsinteger)hour minute:(nsinteger)minute second:(nsinteger)second

- (nsdate *)datefromcomponents:(nsdatecomponents *)components

- (nsstring *)datestringfromsecond:(nsinteger)second

- (nsdate *)dateafterfromdate:(nsdate *)date withyear:(nsinteger)year month:(nsinteger)month day:(nsinteger)day

- (nsinteger)differencefromdate:(nsdate *)date1 todate:(nsdate *)date2

- (nsstring *)formatdifferencetonowfromsecond:(nsinteger)second

if (diff >= 60 && diff < 3600)

if (diff >= 3600 && diff < 3600 * 24)

//幾天前

return [nsstring stringwithformat:@"%ld天前", diff/(3600*24)];

}@end

在開發時往往會遇到後台端返回如下的json

"data": [,。。。。。已經省略

}]

add_time = 1439046677,這是從本條資料生成的時間到2023年1月1日00:00:00的秒數,所以你需要用到- (nsstring *)formatdifferencetonowfromsecond:(nsinteger)second來求出過了幾秒、幾分鐘或者幾天。

如果你用 [nsdate date]方法你將會得到gmt時間,這會和我們的北京時間相差8個小時,所以當你想要得到北京的當時時間,你就必須通過

- (nsdate *)datenow
來獲取當前時區的當前時間,這是通過相差的秒數相加實現的。

我另一篇部落格會詳細介紹時間日曆的其他操作。希望各位能用上。

時間與日期處理nsdate, nscalendar

時間與日期

通常確定時間和日期對乙個程式來說是很有用的,程式可能希望記錄執行時間.或者在某一時間後改變執行方式.例如乙個遊戲可能需要玩家在倒計時內完成某個任務 所有的 系統都使用同一時間和日期起點 格林威治時間 1970年1月1日.而 紀元開始於1980年.時間通過乙個長整型的預定義型別time t來表示,它和...

c 時間與日期

注意c 11有更強大的方法!隨機數及atoi include int abs int num 功能 函式返回引數num.的絕對值。double atof const char str 功能 將字串str轉換成乙個雙精度數值並返回結果。int atoi const char str 功能 將字串str...

Linux C 時間與日期

linux下儲存時間常見的有兩種儲存方式,乙個是從1970年到現在經過了多少秒,乙個是用乙個結構來分別儲存年月日時分秒的。time t 這種型別就是用來儲存從1970年到現在經過了多少秒,要想更精確一點,可以用結構struct timeval,它精確到微妙。struct timeval 而直接儲存年...