3 回答

TA貢獻1998條經驗 獲得超6個贊
因為這顯然是我最受歡迎的答案,所以我會嘗試編輯它以包含更多信息。
盡管它的名字,NSDate
它本身只是標志著機器時間的一個點,而不是一個日期。由NSDate
a 指定的時間點與年,月或日之間沒有相關性。為此,您必須參考日歷。任何給定的時間點將根據您正在查看的日歷返回不同的日期信息(例如,在格里高利歷和猶太歷的日歷中日期不同),而格里高利歷是最常用的日歷。世界 - 我假設 - 我們有點偏見NSDate
應該總是使用它。NSDate
幸運的是,更加兩黨合作。
NSCalendar
正如你所提到的,獲取日期和時間必須通過,但有一種更簡單的方法:
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];
這將生成一個NSDateComponents
對象,其中包含當天系統(tǒng)日歷中當天的日,月和年。(注意:這不一定是當前用戶指定的日歷,只是默認的系統(tǒng)日歷。)
當然,如果您使用的是其他日歷或日期,則可以輕松更改??梢栽凇?nbsp;NSCalendar
類參考”中找到可用日歷和日歷單位的列表。有關詳細信息NSDateComponents
,請參閱“ NSDateComponents
類參考”。
作為參考,從中訪問單個組件NSDateComponents
非常簡單:
NSInteger day = [components day];NSInteger month = [components month];NSInteger year = [components year];
您只需注意:NSDateComponents
除非您使用有效信息生成它們(即請求NSCalendar
使用NSCalendarUnit
s 提供該信息),否則不會包含您要求的任何字段的有效信息。NSDateComponents
它們本身不包含參考信息 - 它們只是簡單的結構,可以存儲數字供您訪問。例如,如果你想得到一個時代,NSDateComponents
你將不得不NSCalendar
用NSCalendarUnitEra
旗幟來提供生成器方法。
添加回答
舉報