IOS开发值日期计算 ios 计算两日期天数差

Dates

NSDate类提供了创建date,比较date以及计算两个date之间间隔的功能。Date对象是不可改变的。

如果你要创建date对象并表示当前日期,你可以alloc一个NSDate对象并调用init初始化:

[cpp]viewplaincopy
  1. NSDate*now=[[NSDatealloc]init];

或者使用NSDate的date类方法来创建一个日期对象。如果你需要与当前日期不同的日期,你可以使用NSDate的initWithTimeInterval...或dateWithTimeInterval...方法,你也可以使用更复杂的calendar或datecomponents对象。

创建一定时间间隔的NSDate对象:

[plain]viewplaincopy
  1. NSTimeIntervalsecondsPerDay=24*60*60;
  2. NSDate*tomorrow=[[NSDatealloc]initWithTimeIntervalSinceNow:secondsPerDay];
  3. NSDate*yesterday=[[NSDatealloc]initWithTimeIntervalSinceNow:-secondsPerDay];
  4. [tomorrowrelease];
  5. [yesterdayrelease];

使用增加时间间隔的方式来生成NSDate对象:[plain]viewplaincopy
  1. NSTimeIntervalsecondsPerDay=24*60*60;
  2. NSDate*today=[[NSDatealloc]init];
  3. NSDate*tomorrow,*yesterday;
  4. tomorrow=[todaydateByAddingTimeInterval:secondsPerDay];
  5. yesterday=[todaydateByAddingTimeInterval:-secondsPerDay];
  6. [todayrelease];

IOS开发值日期计算 ios 计算两日期天数差
如果要对NSDate对象进行比较,可以使用isEqualToDate:,compare:, laterDate:和earlierDate:方法。这些方法都进行精确比较,也就是说这些方法会一直精确比较到NSDate对象中秒一级。例如,你可能比较两个日期,如果他们之间的间隔在一分钟之内则认为这两个日期是相等的。在这种情况下使用,timeIntervalSinceDate:方法来对两个日期进行比较。下面的代码进行了示例:[plain]viewplaincopy
  1. if(fabs([date2timeIntervalSinceDate:date1])<60)...

//数字转换为时间

NSString*time = @"1329038338";

NSDateFormatter*formatter = [[[NSDateFormatter alloc]init]autorelease];
[formattersetDateStyle:NSDateFormatterMediumStyle];
[formattersetTimeStyle:NSDateFormatterShortStyle];
[formatter setDateFormat:@"YYYY-MM-dd HH:mm"];
NSDate*confromTimesp = [NSDatedateWithTimeIntervalSince1970:(NSTimeInterval)[timeintValue]];
NSString*confromTimespStr = [formatterstringFromDate:confromTimesp];
timeString = confromTimespStr;






NSCalendar &NSDateComponents

日历对象封装了对系统日期的计算,包括这一年开始,总天数以及划分。你将使用日历对象对绝对日期与datecomponents(包括年,月,日,时,分,秒)进行转换。

NSCalendar定义了不同的日历,包括佛教历,格里高利历等(这些都与系统提供的本地化设置相关)。NSCalendar与NSDateComponents对象紧密相关。

你可以通过NSCalendar对象的currentCalendar方法来获得当前系统用户设置的日历。

[plain]viewplaincopy
  1. NSCalendar*currentCalendar=[NSCalendarcurrentCalendar];
  2. NSCalendar*japaneseCalendar=[[NSCalendaralloc]initWithCalendarIdentifier:NSJapaneseCalendar];
  3. NSCalendar*usersCalendar=[[NSLocalecurrentLocale]objectForKey:NSLocaleCalendar];
usersCalendar和currentCalendar对象是相等的,尽管他们是不同的对象。

你可以使用NSDateComponents对象来表示一个日期对象的组件——例如年,月,日和小时。如果要使一个NSDateComponents对象有意义,你必须将其与一个日历对象相关联。下面的代码示例了如何创建一个NSDateComponents对象:

[plain]viewplaincopy
  1. NSDateComponents*components=[[NSDateComponentsalloc]init];
  2. [componentssetDay:6];
  3. [componentssetMonth:5];
  4. [componentssetYear:2004];
  5. NSIntegerweekday=[componentsweekday];//Undefined(==NSUndefinedDateComponent)

要将一个日期对象解析到相应的datecomponents,你可以使用NSCalendar的components:fromDate:方法。此外日期本身,你需要指定NSDateComponents对象返回组件。[plain]viewplaincopy
  1. NSDate*today=[NSDatedate];
  2. NSCalendar*gregorian=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
  3. NSDateComponents*weekdayComponents=[gregoriancomponents:(NSDayCalendarUnit|NSWeekdayCalendarUnit)fromDate:today];
  4. NSIntegerday=[weekdayComponentsday];
  5. NSIntegerweekday=[weekdayComponentsweekday];
  6. 同样你也可以从NSDateComponents对象来创建NSDate对象:
  7. NSDateComponents*components=[[NSDateComponentsalloc]init];
  8. [componentssetWeekday:2];//Monday
  9. [componentssetWeekdayOrdinal:1];//ThefirstMondayinthemonth
  10. [componentssetMonth:5];//May
  11. [componentssetYear:2008];
  12. NSCalendar*gregorian=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
  13. NSDate*date=[gregoriandateFromComponents:components];

为了保证正确的行为,您必须确保使用的组件在日历上是有意义的。指定“出界”日历组件,如一个-6或2月30日在公历中的日期值产生未定义的行为。

你也可以创建一个不带年份的NSDate对象,这样的操作系统会自动生成一个年份,但在后面的代码中不会使用其自动生成的年份。

[plain]viewplaincopy
  1. NSDateComponents*components=[[NSDateComponentsalloc]init];
  2. [componentssetMonth:11];
  3. [componentssetDay:7];
  4. NSCalendar*gregorian=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
  5. NSDate*birthday=[gregoriandateFromComponents:components];

下面的示例显示了如何从一个日历置换到另一个日历:[plain]viewplaincopy
  1. NSDateComponents*comps=[[NSDateComponentsalloc]init];
  2. [compssetDay:6];
  3. [compssetMonth:5];
  4. [compssetYear:2004];
  5. NSCalendar*gregorian=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
  6. NSDate*date=[gregoriandateFromComponents:comps];
  7. [compsrelease];
  8. [gregorianrelease];
  9. NSCalendar*hebrew=[[NSCalendaralloc]initWithCalendarIdentifier:NSHebrewCalendar];
  10. NSUIntegerunitFlags=NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit;
  11. NSDateComponents*components=[hebrewcomponents:unitFlagsfromDate:date];
  12. NSIntegerday=[componentsday];//15
  13. NSIntegermonth=[componentsmonth];//9
  14. NSIntegeryear=[componentsyear];//5764

历法计算

在当前时间加上一个半小时:

[plain]viewplaincopy
  1. NSDate*today=[[NSDatealloc]init];
  2. NSCalendar*gregorian=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
  3. NSDateComponents*offsetComponents=[[NSDateComponentsalloc]init];
  4. [offsetComponentssetHour:1];
  5. [offsetComponentssetMinute:30];
  6. //Calculatewhen,accordingtoTomLehrer,WorldWarIIIwillend
  7. NSDate*endOfWorldWar3=[gregoriandateByAddingComponents:offsetComponentstoDate:todayoptions:0];

获得当前星期中的星期天(使用格里高利历):[plain]viewplaincopy
  1. NSDate*today=[[NSDatealloc]init];
  2. NSCalendar*gregorian=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
  3. //Gettheweekdaycomponentofthecurrentdate
  4. NSDateComponents*weekdayComponents=[gregoriancomponents:NSWeekdayCalendarUnitfromDate:today];
  5. NSDateComponents*componentsToSubtract=[[NSDateComponentsalloc]init];
  6. [componentsToSubtractsetDay:0-([weekdayComponentsweekday]-1)];
  7. NSDate*beginningOfWeek=[gregoriandateByAddingComponents:componentsToSubtracttoDate:todayoptions:0];
  8. NSDateComponents*components=[gregoriancomponents:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit)fromDate:beginningOfWeek];
  9. beginningOfWeek=[gregoriandateFromComponents:components];

如何可以计算出一周的第一天(根据系统的日历设置):

[cpp]viewplaincopy
  1. NSDate*today=[[NSDatealloc]init];
  2. NSDate*beginningOfWeek=nil;
  3. BOOLok=[gregorianrangeOfUnit:NSWeekCalendarUnitstartDate:&beginningOfWeekinterval:NULLforDate:today];

获得两个日期之间的间隔:[cpp]viewplaincopy
  1. NSDate*startDate=...;
  2. NSDate*endDate=...;
  3. NSCalendar*gregorian=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
  4. NSUIntegerunitFlags=NSMonthCalendarUnit|NSDayCalendarUnit;
  5. NSDateComponents*components=[gregoriancomponents:unitFlagsfromDate:startDatetoDate:endDateoptions:0];
  6. NSIntegermonths=[componentsmonth];
  7. NSIntegerdays=[componentsday];

使用Category来计算同一时代(AD|BC)两个日期午夜之间的天数:

[plain]viewplaincopy
  1. @implementationNSCalendar(MySpecialCalculations)
  2. -(NSInteger)daysWithinEraFromDate:(NSDate*)startDatetoDate:(NSDate*)endDate{
  3. NSIntegerstartDay=[selfordinalityOfUnit:NSDayCalendarUnitinUnit:NSEraCalendarUnitforDate:startDate];
  4. NSIntegerendDay=[selfordinalityOfUnit:NSDayCalendarUnitinUnit:NSEraCalendarUnitforDate:endDate];
  5. returnendDay-startDay;
  6. }
  7. @end

使用Category来计算不同时代(AD|BC)两个日期的天数:[plain]viewplaincopy
  1. @implementationNSCalendar(MyOtherMethod)
  2. -(NSInteger)daysFromDate:(NSDate*)startDatetoDate:(NSDate*)endDate{
  3. NSCalendarUnitunits=NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit;
  4. NSDateComponents*comp1=[selfcomponents:unitsfromDate:startDate];
  5. NSDateComponents*comp2=[selfcomponents:unitsfromDateendDate];
  6. [comp1setHour:12];
  7. [comp2setHour:12];
  8. NSDate*date1=[selfdateFromComponents:comp1];
  9. NSDate*date2=[selfdateFromComponents:comp2];
  10. return[[selfcomponents:NSDayCalendarUnitfromDate:date1toDate:date2options:0]day];
  11. }
  12. @end

判断一个日期是否在当前一周内(使用格里高利历):[plain]viewplaincopy
  1. -(BOOL)isDateThisWeek:(NSDate*)date{
  2. NSDate*start;
  3. NSTimeIntervalextends;
  4. NSCalendar*cal=[NSCalendarautoupdatingCurrentCalendar];
  5. NSDate*today=[NSDatedate];
  6. BOOLsuccess=[calrangeOfUnit:NSWeekCalendarUnitstartDate:&startinterval:&extendsforDate:today];
  7. if(!success)
  8. returnNO;
  9. NSTimeIntervaldateInSecs=[datetimeIntervalSinceReferenceDate];
  10. NSTimeIntervaldayStartInSecs=[starttimeIntervalSinceReferenceDate];
  11. if(dateInSecs>dayStartInSecs&&dateInSecs<(dayStartInSecs+extends)){
  12. returnYES;
  13. }
  14. else{
  15. returnNO;
  16. }
  17. }

  

爱华网本文地址 » http://www.413yy.cn/a/25101016/320928.html

更多阅读

排卵期计算方法 如何测算排卵期

排卵期计算方法有哪些:许多女性不知道自己的排卵到底是哪一天,利用下面公式,经过一段时间的测试,很容易计算出来的。对于月经周期正常的:女性排卵是受脑下垂体和卵巢的内分泌激素的影响而呈现周期性变化,两者的周期长短是一致的,

人如何计算日期的? 如何快速计算日期天数

谁知道古人如何计算日期的?看清楚我的问题,别乱答。比如1989年是巳已年,请问是如何算到的?那么我想知道,1970,1980,1992这些年份,他又是什么年呢?给个计算公式最佳答案天干和地支天干和地支合称干支。十天

求关于信用证有效期和交单期的介绍 信用证有效期和交单期

问: 请教一下,给客户发货,如果开船日在信用证的有效期内,但到达日已超出有效期,我还能正常收款吗?答:看来楼主和楼上的几位对信用证一知半解——没有搞清楚什么是信用证的有效期、什么是最迟装运期?而这两日期关系到受益人能否顺利结汇,至关

声明:《IOS开发值日期计算 ios 计算两日期天数差》为网友超拽帅气男神分享!如侵犯到您的合法权益请联系我们删除