日期和时间用到的。最全的方法。
#import <Foundation/Foundation.h>
@interface CalculatorSingleton : NSObject
@property (nonatomic, strong) NSCalendar *calendar;
+ (CalculatorSingleton *) sharedInstance;
- (int)numberOfWeeksInMonthContainingDate:(NSDate *)date;
- (NSDate *)firstDayOfMonthContainingDate:(NSDate *)date;
- (NSDate *)lastDayOfMonthContainingDate:(NSDate *)date;
- (BOOL)dateIsToday:(NSDate *)date;
- (NSDate*)getLocaleDate;
+ (NSDate*)getLocaleDate;
- (int)dayOfWeekForDate:(NSDate *)date;
- (NSDate *)nextDay:(NSDate *)date;
- (NSDate*)previousDay:(NSDate*)date;
- (NSDate*)nextMonth:(NSDate*)date;
- (NSDate*)previousMonth:(NSDate*)date;
- (BOOL)date:(NSDate*)date1 InSameMonthWith:(NSDate*)date2;
- (int)weekNumberInMonthForDate:(NSDate *)date;
- (NSString*)formatDate:(NSDate*)date;
- (int)year:(NSDate*)date;
- (int)month:(NSDate*)date;
- (int)day:(NSDate*)date;
- (int)hour:(NSDate*)date;
- (int)minute:(NSDate*)date;
- (int)second:(NSDate*)date;
- (NSString*)senselFormatDate:(NSDate*)date;
- (NSString*)HMS:(NSDate*)date;
-(NSDate *)nextOrPreviousDay:(NSDate *)date day:(NSInteger)day;
- (NSDate*)localToGMT:(NSDate*)date;
-(NSDate *)GMTToLacal:(NSDate *)date;
- (BOOL)isSameDay:(NSDate*)oneDate withAnotherDay:(NSDate*)anotherDate;
- (NSString*)getChineseCalendarWithDate:(NSDate *)date;
- (NSString*)getMemoryLunarShow;
- (NSDate*)nextYear:(NSDate*)date;
- (NSDate*)previousYear:(NSDate*)date;
@end
#import "CalculatorSingleton.h"
@implementation CalculatorSingleton
@synthesize calendar=_calendar;
staticCalculatorSingleton *_sharedInstance = nil;
//类方法
+ (CalculatorSingleton*)sharedInstance
{
? ? if (_sharedInstance != nil) {
? ? ? ? return_sharedInstance;
? ? }
? ? @synchronized(self) {
? ? ? ? if (_sharedInstance == nil) {
? ? ? ? ? ? [[[selfalloc] init] autorelease];
? ? ? ? }
}
return_sharedInstance;
}
+ (id)allocWithZone:(NSZone*)zone
{
? ? @synchronized(self) {
? ? ? ? if (_sharedInstance == nil) {
? ? ? ? ? ? _sharedInstance = [superallocWithZone:zone];
? ? ? ? ? ? return_sharedInstance;
? ? ? ? }
? ? }
? ? NSAssert(NO, @ "[BlockBackground alloc] explicitly called on singleton class.");
? ? returnnil;
}
- (id)copyWithZone:(NSZone*)zone
{
? ? returnself;
}
- (id)retain
{
? ? returnself;
}
?
-(unsigned)retainCount
{
? ? returnUINT_MAX;
}
?
-(onewayvoid)release
{
?
}
?
-(id)autorelease
{
? ? returnself;
}
?
#pragma mark -?
?
-(id)init
{
? ? self=[superinit];
? ? if(self){
//? ? ? ? NSCalendar* calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]autorelease];
//? ? ? ? NSLog(@"[NSLocale systemLocale]=%@",[NSLocale systemLocale]);
//? ? ? ? //[calendar setLocale:[NSLocale systemLocale]];
//? ? ? ? [self.calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
//? ? ? ? [calendar setFirstWeekday:2];//从周一开始
//? ? ? ? self.calendar = calendar;
//? ? ? ? NSDate* today = [self getLocaleDate];
//? ? ? ? NSLog(@"%@",today);
?? ? ? ?
?? ? ? ?
? ? ? ? self.calendar=[[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar]autorelease];
? ? ? ? [self.calendarsetLocale:[NSLocalesystemLocale]];
? ? ? ? [self.calendarsetTimeZone:[NSTimeZonetimeZoneWithAbbreviation:@"GMT"]];
? ? ? ? [self.calendarsetFirstWeekday:1];//从周日开始
? ? ? ? NSDate* today =[selfgetLocaleDate];
? ? ? ? NSLog(@"今天是%@",today);
? ? }
? ? returnself;
}
-(void)dealloc
{
? ? [_calendarrelease];
? ? [superdealloc];
}
#pragma mark -根据某天返回这天所在月有几个星期
?
-(int)numberOfWeeksInMonthContainingDate:(NSDate*)date {
? ? return[self.calendarrangeOfUnit:NSWeekCalendarUnitinUnit:NSMonthCalendarUnitforDate:date].length;
}
?
#pragma mark -根据某天得到本天所在月的第一天
?
-(NSDate*)firstDayOfMonthContainingDate:(NSDate*)date {
?? ?
? ? NSDateComponents*comps =[self.calendarcomponents:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit)fromDate:date];
? ? [comps setDay:1];
? ? NSDate* returnDate =[self.calendardateFromComponents:comps];
? ? return returnDate;
}
?
#pragma mark -根据某天得到本天所在月的最后一天
-(NSDate*)lastDayOfMonthContainingDate:(NSDate*)date {
//? ? NSDateComponents *comps = [self.calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];
//? ? [comps setMonth:1];
//? ? [comps setDay:0];
//? ? NSDate* returnDate = [self.calendar dateFromComponents:comps];
//? ? return returnDate;
? ? NSDate* firstDay=[selffirstDayOfMonthContainingDate:date];
? ? NSDate* nextMonthFirstDay=[selfnextMonth:firstDay];
? ? return[selfpreviousDay:nextMonthFirstDay];
}
?
#pragma mark -判断是不是今天
?
-(BOOL)dateIsToday:(NSDate*)date {
? ? NSDateComponents*otherDay =[self.calendarcomponents:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnitfromDate:date];
? ? NSDateComponents*today =[self.calendarcomponents:NSEraCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnitfromDate:[selfgetLocaleDate]];
?
? ? BOOL isToday=([today day]==[otherDay day]&&
? ? ? ? ? ? ? ? [today month]==[otherDay month]&&
? ? ? ? ? ? ? ? [today year]==[otherDay year]&&
? ? ? ? ? ? ? ? [today era]==[otherDay era]);
? ? //NSLog(@"date=%@,isToday=%d",date,isToday);
? ? return isToday;
}
?
#pragma mark -获取本地时间
?
-(NSDate*)getLocaleDate{
? ? NSDate*date =[NSDatedate];
? ? NSTimeZone*zone =[NSTimeZonesystemTimeZone];
? ? NSInteger interval =[zone secondsFromGMTForDate: date];
? ? NSDate* realDate =[date dateByAddingTimeInterval: interval];
? ? return realDate;
}
?
-(NSDate*)GMTToLocal{
? ? NSDate* date =[[NSDatedate]dateByAddingTimeInterval:[[NSTimeZonesystemTimeZone]secondsFromGMT]];
? ? return date;
}
?
-(NSDate*)localToGMT:(NSDate*)date{
? ? return[date dateByAddingTimeInterval:-[[NSTimeZonesystemTimeZone]secondsFromGMT]];
}
?
-(NSDate*)GMTToLacal:(NSDate*)date{
? ? return[date dateByAddingTimeInterval:[[NSTimeZonesystemTimeZone]secondsFromGMT]];
}
?
+(NSDate*)getLocaleDate{
? ? NSDate*date =[NSDatedate];
? ? NSTimeZone*zone =[NSTimeZonesystemTimeZone];
? ? NSInteger interval =[zone secondsFromGMTForDate: date];
? ? NSDate* realDate =[date dateByAddingTimeInterval: interval];
? ? return realDate;
}
#pragma mark -根据某天返回这一天是星期几
?
-(int)dayOfWeekForDate:(NSDate*)date {
? ? NSDateComponents*comps =[self.calendarcomponents:NSWeekdayCalendarUnitfromDate:date];
?? // NSLog(@"comps.weekday=%d",comps.weekday);
? ? return comps.weekday;
}
-(int)weekNumberInMonthForDate:(NSDate*)date {
? ? NSDateComponents*comps =[self.calendarcomponents:(NSWeekOfMonthCalendarUnit)fromDate:date];
? ? return comps.weekOfMonth;
}
?
#pragma mark -获取date的昨天,明天,下个月,上个月
?
-(NSDate*)nextDay:(NSDate*)date {
? ? NSDateComponents*comps =[[NSDateComponentsalloc]init];
? ? [comps setDay:1];
? ? NSDate* returnDate =[self.calendardateByAddingComponents:comps toDate:date options:0];
? ? [comps release];
? ? return returnDate;
}
?
-(NSDate*)nextOrPreviousDay:(NSDate*)date day:(NSInteger)day{
? ? NSDateComponents*comps =[[[NSDateComponentsalloc]init]autorelease];
? ? [comps setDay:day];
? ? return[self.calendardateByAddingComponents:comps toDate:date options:0];
}
?
-(NSDate*)previousDay:(NSDate*)date{
? ? NSDateComponents*comps =[[[NSDateComponentsalloc]init]autorelease];
? ? [comps setDay:-1];
? ? return[self.calendardateByAddingComponents:comps toDate:date options:0];
?? ?
}
-(NSDate*)nextMonth:(NSDate*)date{
? ? NSDateComponents*comps =[[[NSDateComponentsalloc]init]autorelease];
? ? [comps setMonth:1];
? ? return[self.calendardateByAddingComponents:comps toDate:date options:0];
?? ?
}
-(NSDate*)nextYear:(NSDate*)date{
? ? NSDateComponents*comps =[[[NSDateComponentsalloc]init]autorelease];
? ? [comps setYear:1];
? ? return[self.calendardateByAddingComponents:comps toDate:date options:0];
}
-(NSDate*)previousYear:(NSDate*)date{
? ? NSDateComponents*comps =[[[NSDateComponentsalloc]init]autorelease];
? ? [comps setYear:-1];
? ? return[self.calendardateByAddingComponents:comps toDate:date options:0];
}
-(NSDate*)previousMonth:(NSDate*)date{
? ? NSDateComponents*comps =[[[NSDateComponentsalloc]init]autorelease];
? ? [comps setMonth:-1];
? ? return[self.calendardateByAddingComponents:comps toDate:date options:0];
}
#pragma mark -?
-(BOOL)date:(NSDate*)date1 InSameMonthWith:(NSDate*)date2{
? ? NSDateComponents*comps1 =[self.calendarcomponents:(NSMonthCalendarUnit)fromDate:date1];
? ? NSDateComponents*comps2 =[self.calendarcomponents:(NSMonthCalendarUnit)fromDate:date2];
? ? return comps1.month== comps2.month;
}?
#pragma mark -时间格式化NSDate->2012-02-02
?
-(NSString*)senselFormatDate:(NSDate*)date{
? ? int year =[selfyear:date];
? ? int mouth =[selfmonth:date];
? ? int day =[selfday:date];
? ? NSString* dateString =[[NSStringalloc]initWithFormat:@"%.2d/%.2d/%.2d",year,mouth,day];
? ? return[dateString autorelease];
}
-(NSString*)HMS:(NSDate*)date{
? ? int hour =[selfhour:date];
? ? int minute =[selfminute:date];
? ? int second =[selfsecond:date];
? ? NSString* hmss =[[NSStringalloc]initWithFormat:@"%.2d:%.2d:%.2d",hour,minute,second];
? ? return[hmss autorelease];
}
-(NSString*)formatDate:(NSDate*)date{
? ? int year =[selfyear:date];
? ? int mouth =[selfmonth:date];
? ? int day =[selfday:date];
? ? NSString* dateString =[[NSStringalloc]initWithFormat:@"%.2d-%.2d-%.2d",year,mouth,day];
? ? return[dateString autorelease];
}
?
-(int)year:(NSDate*)date {
? ? NSDateComponents*components =[self.calendarcomponents:NSYearCalendarUnitfromDate:date];
? ? return[components year];
}
?
-(int)month:(NSDate*)date {
? ? NSDateComponents*components =[self.calendarcomponents:NSMonthCalendarUnitfromDate:date];
? ? return[components month];
}
?
-(int)day:(NSDate*)date {
? ? NSDateComponents*components =[self.calendarcomponents:NSDayCalendarUnitfromDate:date];
? ? return[components day];
}
-(int)hour:(NSDate*)date{
? ? NSDateComponents*components =[self.calendarcomponents:NSHourCalendarUnitfromDate:date];
? ? return[components hour];
}
-(int)minute:(NSDate*)date{
? ? NSDateComponents*components =[self.calendarcomponents:NSMinuteCalendarUnitfromDate:date];
? ? return[components minute];
}
-(int)second:(NSDate*)date{
? ? NSDateComponents*components =[self.calendarcomponents:NSSecondCalendarUnitfromDate:date];
? ? return[components second];
}
-(BOOL)isSameDay:(NSDate*)oneDate withAnotherDay:(NSDate*)anotherDate{
? ? int oneYear=[selfyear:oneDate];
? ? int anotherYear=[selfyear:anotherDate];
?? ?
? ? int oneMonth=[selfmonth:oneDate];
? ? int anotherMonth=[selfmonth:anotherDate];
?? ?
? ? int oneDay=[selfday:oneDate];
? ? int anotherDay=[selfday:anotherDate];
?? ?
? ? if(oneYear==anotherYear && oneMonth==anotherMonth && oneDay==anotherDay){
? ? ? ? returnYES;
? ? }else{
? ? ? ? returnNO;
? ? }
}
-(NSString*)getChineseCalendarWithDate:(NSDate*)date{
? ? NSArray*chineseMonths=[NSArrayarrayWithObjects:
? ? ? ? ? ? ? ? ? ? ? ? ? ? @"正月",@"二月",@"三月",@"四月",@"五月",@"六月",@"七月",@"八月",
? ? ? ? ? ? ? ? ? ? ? ? ? ? @"九月",@"十月",@"冬月",@"腊月",nil];
?? ?
? ? NSArray*chineseDays=[NSArrayarrayWithObjects:
? ? ? ? ? ? ? ? ? ? ? ? ? @"初一",@"初二",@"初三",@"初四",@"初五",@"初六",@"初七",@"初八",@"初九",@"初十",
? ? ? ? ? ? ? ? ? ? ? ? ? @"十一",@"十二",@"十三",@"十四",@"十五",@"十六",@"十七",@"十八",@"十九",@"二十",
? ? ? ? ? ? ? ? ? ? ? ? ? @"廿一",@"廿二",@"廿三",@"廿四",@"廿五",@"廿六",@"廿七",@"廿八",@"廿九",@"三十",? nil];
?? ?
? ? NSCalendar*localeCalendar=[[NSCalendaralloc]initWithCalendarIdentifier:NSChineseCalendar];
?? ?
? ? unsigned unitFlags =NSYearCalendarUnit|NSMonthCalendarUnit|? NSDayCalendarUnit;
?? ?
? ? NSDateComponents*localeComp =[localeCalendar components:unitFlags fromDate:date];
?
? ? NSString*m_str =[chineseMonths objectAtIndex:localeComp.month-1];//月
? ? NSString*d_str =[chineseDays objectAtIndex:localeComp.day-1];//日
?? ?
?? ?
? ? NSDateFormatter*dateFormatter =[[NSDateFormatteralloc]init];
?? ?
? ? //设定时间格式,这里可以设置成自己需要的格式
? ? [dateFormatter setDateFormat:@"yyyy年MM月dd日"];
?? ? ? ?
? ? NSString*currentDateStr =[dateFormatter stringFromDate:[NSDatedate]];
?? ?
? ? NSString*chineseCal_str =[NSStringstringWithFormat:@"%@ 农历%@%@",currentDateStr,m_str,d_str];
?? ?
? ? [localeCalendar release];
?? ?
? ? [dateFormatter release];
?? ?
? ? return chineseCal_str;
}
-(NSString*)getMemoryLunarShow{
?? ?
? ? NSArray*chineseMonths=[NSArrayarrayWithObjects:
? ? ? ? ? ? ? ? ? ? ? ? ? ? @"正月",@"二月",@"三月",@"四月",@"五月",@"六月",@"七月",@"八月",
? ? ? ? ? ? ? ? ? ? ? ? ? ? @"九月",@"十月",@"冬月",@"腊月",nil];
?? ?
? ? NSArray*chineseDays=[NSArrayarrayWithObjects:
? ? ? ? ? ? ? ? ? ? ? ? ? @"初一",@"初二",@"初三",@"初四",@"初五",@"初六",@"初七",@"初八",@"初九",@"初十",
? ? ? ? ? ? ? ? ? ? ? ? ? @"十一",@"十二",@"十三",@"十四",@"十五",@"十六",@"十七",@"十八",@"十九",@"二十",
? ? ? ? ? ? ? ? ? ? ? ? ? @"廿一",@"廿二",@"廿三",@"廿四",@"廿五",@"廿六",@"廿七",@"廿八",@"廿九",@"三十",? nil];
? ? NSArray* weeks =[NSArrayarrayWithObjects:@"周日",@"周一",@"周二",@"周三",@"周四",@"周五",@"周六",nil];
?? ?
? ? NSDate* today =[selfgetLocaleDate];
?? ?
? ? NSCalendar*localeCalendar =[[NSCalendaralloc]initWithCalendarIdentifier:NSChineseCalendar];
? ? unsigned unitFlags =NSYearCalendarUnit|NSMonthCalendarUnit|? NSDayCalendarUnit;
?
? ? NSDateComponents*localeComp =[localeCalendar components:unitFlags fromDate:today];
? ? NSString*m_str =[chineseMonths objectAtIndex:localeComp.month-1];//月
? ? NSString *d_str = [chineseDays objectAtIndex:localeComp.day-1];//日
? ? int month = [selfmonth:today];
? ? int day =[selfday:today];
? ? int weekNum=[selfdayOfWeekForDate:today];
? ? NSString* week =[NSStringstringWithFormat:@"%@",[weeks objectAtIndex:weekNum-1]];
? ? return [NSStringstringWithFormat:@"农历%@%@? %d月%d日(%@)",m_str,d_str,month,day,week];
}
@end