日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

iphone——日期处理

發(fā)布時(shí)間:2025/3/20 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iphone——日期处理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://blog.csdn.net/lingedeng/article/details/6996599

Dates

????????NSDate類提供了創(chuàng)建date,比較date以及計(jì)算兩個(gè)date之間間隔的功能。Date對(duì)象是不可改變的。

????????如果你要?jiǎng)?chuàng)建date對(duì)象并表示當(dāng)前日期,你可以alloc一個(gè)NSDate對(duì)象并調(diào)用init初始化:

?

[cpp]?view plaincopy
  • NSDate?*now?=?[[NSDate?alloc]?init];??

  • ????????或者使用NSDate的date類方法來創(chuàng)建一個(gè)日期對(duì)象。如果你需要與當(dāng)前日期不同的日期,你可以使用NSDate的initWithTimeInterval...或dateWithTimeInterval...方法,你也可以使用更復(fù)雜的calendar或date components對(duì)象。

    ?

    ????????創(chuàng)建一定時(shí)間間隔的NSDate對(duì)象:

    ?

    [plain]?view plaincopy
  • NSTimeInterval?secondsPerDay?=?24?*?60?*?60;??
  • ??
  • NSDate?*tomorrow?=?[[NSDate?alloc]?initWithTimeIntervalSinceNow:secondsPerDay];??
  • ??
  • NSDate?*yesterday?=?[[NSDate?alloc]?initWithTimeIntervalSinceNow:-secondsPerDay];??
  • ??
  • [tomorrow?release];??
  • [yesterday?release];??

  • ????????使用增加時(shí)間間隔的方式來生成NSDate對(duì)象:

    ?

    ?

    [plain]?view plaincopy
  • NSTimeInterval?secondsPerDay?=?24?*?60?*?60;??
  • ??
  • NSDate?*today?=?[[NSDate?alloc]?init];??
  • NSDate?*tomorrow,?*yesterday;??
  • ??
  • tomorrow?=?[today?dateByAddingTimeInterval:?secondsPerDay];??
  • yesterday?=?[today?dateByAddingTimeInterval:?-secondsPerDay];??
  • ??
  • [today?release];??

  • ????????如果要對(duì)NSDate對(duì)象進(jìn)行比較,可以使用isEqualToDate:, compare:, laterDate:和 earlierDate:方法。這些方法都進(jìn)行精確比較,也就是說這些方法會(huì)一直精確比較到NSDate對(duì)象中秒一級(jí)。例如,你可能比較兩個(gè)日期,如果他們之間的間隔在一分鐘之內(nèi)則認(rèn)為這兩個(gè)日期是相等的。在這種情況下使用,timeIntervalSinceDate:方法來對(duì)兩個(gè)日期進(jìn)行比較。下面的代碼進(jìn)行了示例:

    ?

    ?

    [plain]?view plaincopy
  • if?(fabs([date2?timeIntervalSinceDate:date1])?<?60)?...??
  • ?

    ?

    NSCalendar & NSDateComponents

    ????????日歷對(duì)象封裝了對(duì)系統(tǒng)日期的計(jì)算,包括這一年開始,總天數(shù)以及劃分。你將使用日歷對(duì)象對(duì)絕對(duì)日期與date components(包括年,月,日,時(shí),分,秒)進(jìn)行轉(zhuǎn)換。

    ????????NSCalendar定義了不同的日歷,包括佛教歷,格里高利歷等(這些都與系統(tǒng)提供的本地化設(shè)置相關(guān))。NSCalendar與NSDateComponents對(duì)象緊密相關(guān)。

    ????????你可以通過NSCalendar對(duì)象的currentCalendar方法來獲得當(dāng)前系統(tǒng)用戶設(shè)置的日歷。

    ?

    [plain]?view plaincopy
  • NSCalendar?*currentCalendar?=?[NSCalendar?currentCalendar];??
  • ??
  • NSCalendar?*japaneseCalendar?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSJapaneseCalendar];??
  • ??
  • NSCalendar?*usersCalendar?=?[[NSLocale?currentLocale]?objectForKey:NSLocaleCalendar];??
  • ????????usersCalendar和currentCalendar對(duì)象是相等的,盡管他們是不同的對(duì)象。

    ?

    ????????你可以使用NSDateComponents對(duì)象來表示一個(gè)日期對(duì)象的組件——例如年,月,日和小時(shí)。如果要使一個(gè)NSDateComponents對(duì)象有意義,你必須將其與一個(gè)日歷對(duì)象相關(guān)聯(lián)。下面的代碼示例了如何創(chuàng)建一個(gè)NSDateComponents對(duì)象:

    ?

    [plain]?view plaincopy
  • NSDateComponents?*components?=?[[NSDateComponents?alloc]?init];??
  • ??
  • [components?setDay:6];??
  • [components?setMonth:5];??
  • [components?setYear:2004];??
  • ??
  • NSInteger?weekday?=?[components?weekday];?//?Undefined?(==?NSUndefinedDateComponent)??

  • ????????要將一個(gè)日期對(duì)象解析到相應(yīng)的date components,你可以使用NSCalendar的components:fromDate:方法。此外日期本身,你需要指定NSDateComponents對(duì)象返回組件。

    ?

    ?

    [plain]?view plaincopy
  • NSDate?*today?=?[NSDate?date];??
  • ??
  • NSCalendar?*gregorian?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSGregorianCalendar];??
  • ??
  • NSDateComponents?*weekdayComponents?=?[gregorian?components:(NSDayCalendarUnit?|?NSWeekdayCalendarUnit)?fromDate:today];??
  • ??
  • NSInteger?day?=?[weekdayComponents?day];??
  • NSInteger?weekday?=?[weekdayComponents?weekday];??
  • ??
  • 同樣你也可以從NSDateComponents對(duì)象來創(chuàng)建NSDate對(duì)象:??
  • NSDateComponents?*components?=?[[NSDateComponents?alloc]?init];??
  • ??
  • [components?setWeekday:2];?//?Monday??
  • [components?setWeekdayOrdinal:1];?//?The?first?Monday?in?the?month??
  • [components?setMonth:5];?//?May??
  • [components?setYear:2008];??
  • ??
  • NSCalendar?*gregorian?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSGregorianCalendar];??
  • ??
  • NSDate?*date?=?[gregorian?dateFromComponents:components];??

  • ????????為了保證正確的行為,您必須確保使用的組件在日歷上是有意義的。指定“出界”日歷組件,如一個(gè)-6或2月30日在公歷中的日期值產(chǎn)生未定義的行為。

    ?

    ????????你也可以創(chuàng)建一個(gè)不帶年份的NSDate對(duì)象,這樣的操作系統(tǒng)會(huì)自動(dòng)生成一個(gè)年份,但在后面的代碼中不會(huì)使用其自動(dòng)生成的年份。

    ?

    [plain]?view plaincopy
  • NSDateComponents?*components?=?[[NSDateComponents?alloc]?init];??
  • ??
  • [components?setMonth:11];??
  • [components?setDay:7];??
  • ??
  • NSCalendar?*gregorian?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSGregorianCalendar];??
  • ??
  • NSDate?*birthday?=?[gregorian?dateFromComponents:components];??

  • ??????? 下面的示例顯示了如何從一個(gè)日歷置換到另一個(gè)日歷:

    ?

    ?

    [plain]?view plaincopy
  • NSDateComponents?*comps?=?[[NSDateComponents?alloc]?init];??
  • ??
  • [comps?setDay:6];??
  • [comps?setMonth:5];??
  • [comps?setYear:2004];??
  • ??
  • NSCalendar?*gregorian?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSGregorianCalendar];??
  • ??
  • NSDate?*date?=?[gregorian?dateFromComponents:comps];??
  • ??
  • [comps?release];??
  • [gregorian?release];??
  • ??
  • NSCalendar?*hebrew?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSHebrewCalendar];??
  • ??
  • NSUInteger?unitFlags?=?NSDayCalendarUnit?|?NSMonthCalendarUnit?|?NSYearCalendarUnit;??
  • ??
  • NSDateComponents?*components?=?[hebrew?components:unitFlags?fromDate:date];??
  • ??
  • NSInteger?day?=?[components?day];?//?15??
  • NSInteger?month?=?[components?month];?//?9??
  • NSInteger?year?=?[components?year];?//?5764??
  • ?

    ?

    歷法計(jì)算

    ????????在當(dāng)前時(shí)間加上一個(gè)半小時(shí):

    [plain]?view plaincopy
  • NSDate?*today?=?[[NSDate?alloc]?init];??
  • ??
  • NSCalendar?*gregorian?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSGregorianCalendar];??
  • ??
  • NSDateComponents?*offsetComponents?=?[[NSDateComponents?alloc]?init];??
  • ??
  • [offsetComponents?setHour:1];??
  • [offsetComponents?setMinute:30];??
  • ??
  • //?Calculate?when,?according?to?Tom?Lehrer,?World?War?III?will?end??
  • NSDate?*endOfWorldWar3?=?[gregorian?dateByAddingComponents:offsetComponents?toDate:today?options:0];??

  • ????????獲得當(dāng)前星期中的星期天(使用格里高利歷):

    ?

    ?

    [plain]?view plaincopy
  • NSDate?*today?=?[[NSDate?alloc]?init];??
  • ??
  • NSCalendar?*gregorian?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSGregorianCalendar];??
  • ??
  • //?Get?the?weekday?component?of?the?current?date??
  • NSDateComponents?*weekdayComponents?=?[gregorian?components:NSWeekdayCalendarUnit?fromDate:today];??
  • ??
  • /*??
  • Create?a?date?components?to?represent?the?number?of?days?to?subtract?from?the?current?date.??
  • ??
  • The?weekday?value?for?Sunday?in?the?Gregorian?calendar?is?1,?so?subtract?1?from?the?number?of?days?to?subtract?from?the?date?in?question.??(If?today?is?Sunday,?subtract?0?days.)??
  • */??
  • ??
  • NSDateComponents?*componentsToSubtract?=?[[NSDateComponents?alloc]?init];??
  • ??
  • [componentsToSubtract?setDay:?0?-?([weekdayComponents?weekday]?-?1)];??
  • ??
  • NSDate?*beginningOfWeek?=?[gregorian?dateByAddingComponents:componentsToSubtract?toDate:today?options:0];??
  • ??
  • /*??
  • Optional?step:??
  • beginningOfWeek?now?has?the?same?hour,?minute,?and?second?as?the?original?date?(today).??
  • ??
  • To?normalize?to?midnight,?extract?the?year,?month,?and?day?components?and?create?a?new?date?from?those?components.??
  • */??
  • ??
  • NSDateComponents?*components?=?[gregorian?components:(NSYearCalendarUnit?|?NSMonthCalendarUnit?|?NSDayCalendarUnit)?fromDate:?beginningOfWeek];??
  • ??
  • beginningOfWeek?=?[gregorian?dateFromComponents:components];??
  • ????????如何可以計(jì)算出一周的第一天(根據(jù)系統(tǒng)的日歷設(shè)置):

    ?

    [cpp]?view plaincopy
  • NSDate?*today?=?[[NSDate?alloc]?init];??
  • ??
  • NSDate?*beginningOfWeek?=?nil;??
  • ??
  • BOOL?ok?=?[gregorian?rangeOfUnit:NSWeekCalendarUnit?startDate:&beginningOfWeek?interval:NULL?forDate:?today];??

  • ??????? 獲得兩個(gè)日期之間的間隔:

    ?

    ?

    [cpp]?view plaincopy
  • NSDate?*startDate?=?...;??
  • NSDate?*endDate?=?...;??
  • ??
  • NSCalendar?*gregorian?=?[[NSCalendar?alloc]?initWithCalendarIdentifier:NSGregorianCalendar];??
  • ??
  • NSUInteger?unitFlags?=?NSMonthCalendarUnit?|?NSDayCalendarUnit;??
  • ??
  • NSDateComponents?*components?=?[gregorian?components:unitFlags?fromDate:startDate?toDate:endDate?options:0];??
  • ??
  • NSInteger?months?=?[components?month];??
  • NSInteger?days?=?[components?day];??
  • ?

    ????????使用Category來計(jì)算同一時(shí)代(AD|BC)兩個(gè)日期午夜之間的天數(shù):

    ?

    [plain]?view plaincopy
  • @implementation?NSCalendar?(MySpecialCalculations)??
  • ??
  • -(NSInteger)daysWithinEraFromDate:(NSDate?*)?startDate?toDate:(NSDate?*)?endDate?{??
  • ?????NSInteger?startDay=[self?ordinalityOfUnit:NSDayCalendarUnit?inUnit:?NSEraCalendarUnit?forDate:startDate];??
  • ??
  • ?????NSInteger?endDay=[self?ordinalityOfUnit:NSDayCalendarUnit?inUnit:?NSEraCalendarUnit?forDate:endDate];??
  • ??
  • ?????return?endDay-startDay;??
  • }??
  • ??
  • @end??

  • ????????使用Category來計(jì)算不同時(shí)代(AD|BC)兩個(gè)日期的天數(shù):

    ?

    ?

    [plain]?view plaincopy
  • @implementation?NSCalendar?(MyOtherMethod)??
  • ??
  • -(NSInteger)?daysFromDate:(NSDate?*)?startDate?toDate:(NSDate?*)?endDate?{??
  • ??
  • ?????NSCalendarUnit?units=NSEraCalendarUnit?|?NSYearCalendarUnit?|?NSMonthCalendarUnit?|?NSDayCalendarUnit;??
  • ??
  • ?????NSDateComponents?*comp1=[self?components:units?fromDate:startDate];??
  • ?????NSDateComponents?*comp2=[self?components:units?fromDate?endDate];??
  • ??
  • ?????[comp1?setHour:12];??
  • ?????[comp2?setHour:12];??
  • ??
  • ?????NSDate?*date1=[self?dateFromComponents:?comp1];??
  • ?????NSDate?*date2=[self?dateFromComponents:?comp2];??
  • ??
  • ?????return?[[self?components:NSDayCalendarUnit?fromDate:date1?toDate:date2?options:0]?day];??
  • }??
  • ??
  • @end??

  • ????????判斷一個(gè)日期是否在當(dāng)前一周內(nèi)(使用格里高利歷):

    ?

    ?

    [plain]?view plaincopy
  • -(BOOL)isDateThisWeek:(NSDate?*)date?{??
  • ??
  • ?????NSDate?*start;??
  • ?????NSTimeInterval?extends;??
  • ??
  • ?????NSCalendar?*cal=[NSCalendar?autoupdatingCurrentCalendar];??
  • ?????NSDate?*today=[NSDate?date];??
  • ??
  • ?????BOOL?success=?[cal?rangeOfUnit:NSWeekCalendarUnit?startDate:&start?interval:?&extends?forDate:today];??
  • ??
  • ?????if(!success)??
  • ????????return?NO;??
  • ??
  • ?????NSTimeInterval?dateInSecs?=?[date?timeIntervalSinceReferenceDate];??
  • ?????NSTimeInterval?dayStartInSecs=?[start?timeIntervalSinceReferenceDate];??
  • ??
  • ?????if(dateInSecs?>?dayStartInSecs?&&?dateInSecs?<?(dayStartInSecs+extends)){??
  • ??????????return?YES;??
  • ?????}??
  • ?????else?{??
  • ??????????return?NO;??
  • ?????}??
  • }?
  • 轉(zhuǎn)載于:https://www.cnblogs.com/geek6/p/4092794.html

    總結(jié)

    以上是生活随笔為你收集整理的iphone——日期处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。