NSDate存储的是世界标准时(UTC),输出时需要根据时区转换为本地时间
Dates
- NSDate
*now = [[NSDate alloc] init];
- NSTimeInterval
secondsPerDay = 24 * 60 * 60; -
- NSDate
*tomorrow = [[NSDate alloc] initWithTimeIntervalSinc eNow:secondsPerDay]; -
- NSDate
*yesterday = [[NSDate alloc] initWithTimeIntervalSinc eNow:-secondsPerDay]; -
- [tomorrow
release]; - [yesterday
release];
- NSTimeInterval
secondsPerDay = 24 * 60 * 60; -
- NSDate
*today = [[NSDate alloc] init]; - NSDate
*tomorrow, *yesterday; -
- tomorrow
= [today dateByAddingTimeInterval : secondsPerDay]; - yesterday
= [today dateByAddingTimeInterval : -secondsPerDay]; -
- [today
release];
- if
(fabs([date2 timeIntervalSinceDate:date1]) < 60) ...
NSCalendar & NSDateComponents
- NSCalendar
*currentCalendar = [NSCalendar currentCalendar]; - NSCalendar
*japaneseCalendar = [[NSCalendar alloc] initWithCalendarIdentifi er:NSJapaneseCalendar]; - NSCalendar
*usersCalendar = [[NSLocale currentLocale] objectForKey:NSLocaleCalendar];
- NSDateComponents
*components = [[NSDateComponents alloc] init]; -
- [components
setDay:6]; - [components
setMonth:5]; - [components
setYear:2004]; -
- NSInteger
weekday = [components weekday]; // Undefined (== NSUndefinedDateComponent )
- NSDate
*today = [NSDate date]; -
- NSCalendar
*gregorian = [[NSCalendar alloc] initWithCalendarIdentifi er:NSGregorianCalendar]; -
- NSDateComponents
*weekdayComponents = [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today]; -
- NSInteger
day = [weekdayComponents day]; - NSInteger
weekday = [weekdayComponents weekday];
同样你也可以从NSDateComponents对象来创建NSDate对象:
- 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] initWithCalendarIdentifi er:NSGregorianCalendar]; -
- NSDate
*date = [gregorian dateFromComponents:components];
- NSDateComponents
*components = [[NSDateComponents alloc] init]; -
- [components
setMonth:11]; - [components
setDay:7]; -
- NSCalendar
*gregorian = [[NSCalendar alloc] initWithCalendarIdentifi er:NSGregorianCalendar]; -
- NSDate
*birthday = [gregorian dateFromComponents:components];
下面的示例显示了如何从一个日历置换到另一个日历:
- NSDateComponents
*comps = [[NSDateComponents alloc] init]; -
- [comps
setDay:6]; - [comps
setMonth:5]; - [comps
setYear:2004]; -
- NSCalendar
*gregorian = [[NSCalendar alloc] initWithCalendarIdentifi er:NSGregorianCalendar]; -
- NSDate
*date = [gregorian dateFromComponents:comps]; -
- [comps
release]; - [gregorian
release]; -
- NSCalendar
*hebrew = [[NSCalendar alloc] initWithCalendarIdentifi er: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
历法计算
- NSDate
*today = [[NSDate alloc] init]; -
- NSCalendar
*gregorian = [[NSCalendar alloc] initWithCalendarIdentifi er: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];
- NSDate
*today = [[NSDate alloc] init]; -
- NSCalendar
*gregorian = [[NSCalendar alloc] initWithCalendarIdentifi er:NSGregorianCalendar]; -
- //
Get the weekday component of the current date - NSDateComponents
*weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:today]; -
-
-
- NSDateComponents
*componentsToSubtract = [[NSDateComponents alloc] init]; -
- [componentsToSubtract
setDay: 0 - ([weekdayComponents weekday] - 1)]; -
- NSDate
*beginningOfWeek = [gregorian dateByAddingComponents:componentsToSubtract toDate:today options:0]; -
-
-
- NSDateComponents
*components = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate: beginningOfWeek]; -
- beginningOfWeek
= [gregorian dateFromComponents:components];
- NSDate
*today = [[NSDate alloc] init]; -
- NSDate
*beginningOfWeek = nil; -
- BOOL
ok = [gregorian rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek interval:NULL forDate: today];
- NSDate
*startDate = ...; - NSDate
*endDate = ...; -
- NSCalendar
*gregorian = [[NSCalendar alloc] initWithCalendarIdentifi er:NSGregorianCalendar]; -
- NSUInteger
unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; -
- NSDateComponents
*components = [gregorian components:unitFlags fromDate:startDate toDate:endDate options:0]; -
- NSInteger
months = [components month]; - NSInteger
days = [components day];
- @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
- @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
- -(BOOL)isDateThisWeek:(NSDate
*)date { -
-
NSDate *start; -
NSTimeInterval extends; -
-
NSCalendar *cal=[NSCalendar autoupdatingCurrentCalen dar]; -
NSDate *today=[NSDate date]; -
-
BOOL success= [cal rangeOfUnit:NSWeekCalendarUnit startDate:&start interval: &extends forDate:today]; -
-
if(!success) -
return NO; -
-
NSTimeInterval dateInSecs = [date timeIntervalSinceReferen ceDate]; -
NSTimeInterval dayStartInSecs= [start timeIntervalSinceReferen ceDate]; -
-
if(dateInSecs > dayStartInSecs && dateInSecs < (dayStartInSecs+extends)){ -
return YES; -
} -
else { -
return NO; -
} - }
来源:http://blog.csdn.net/lingedeng/article/details/6996599
1、获取当前时间
- -(NSString
*)getDate - {
- NSDateFormatter*formatter
= [[NSDateFormatteralloc] init]; - [formatter
setDateFormat:@"yyyy-MM-dd EEEE HH:mm:ss a"]; - NSString
*locationString=[formatter stringFromDate: [NSDate date]]; - [formatter
release]; - return
locationString; - }
//大写的H日期格式将默认为24小时制,小写的h日期格式将默认为12小时
//不需要特别设置,只需要在dataFormat里设置类似"yyyy-MM-dd"这样的格式就可以了