日期和时间用到的。最全的方法。

#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:@"yyyyMMdd"];

 
 

        

 
 

    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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值