`
zjjzmw1
  • 浏览: 1352518 次
  • 性别: Icon_minigender_1
  • 来自: 开封
社区版块
存档分类
最新评论

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

    博客分类:
  • iOS
阅读更多

#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

1
3
分享到:
评论

相关推荐

    Python之日期与时间处理模块(date和datetime)

    在开发工作中,我们经常需要用到日期与时间,如: 作为日志信息的内容输出 计算某个功能的执行时间 用日期命名一个日志文件的名称 记录或展示某文章的发布或修改时间 其他 Python中提供了多个用于对日期和时间...

    SQLite时间转化问题

    SQLite日期时间函数,数据库中常常用到日期和字符的转换,本文介绍了在sqlite数据库中日期和字符之间转换的方法,以前对日期运算的操作。

    日期处理方法

    简单好用的日期、时间处理方法的大集合,项目上需要用到的方法基本都有包含

    解决datefield组件 日期选择框在IE8下显示不完整的问题

    extjs中,经常会用到datefield组件控制用户对日期的操作,比如日志管理,需要开始时间、结束时间,但是IE8下日期选择框会显示不全,解决方法参加代码。 同时改代码解决了开始时间、结束时间的时间范围控制的问题,即...

    fckEditor显示文件按日期时间排序

    最近开发asp.net网站,用到...于是在网上找关于“fckEditor显示文件按日期时间排序”的方法,却一直没有找到。只有自己动手更改文件了。 详情:http://blog.csdn.net/caihn1983/archive/2010/12/30/6107914.aspx

    C++中的日期和时间_time_t与struct_tm

    本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和...

    python+pandas+时间、日期以及时间序列处理方法

    python标准库包含于日期(date)和时间(time)数据的数据类型,datetime、time以及calendar模块会被经常用到。 datetime以毫秒形式存储日期和时间,datetime.timedelta表示两个datetime对象之间的时间差。 给...

    js时间插件WdatePicker

    在查询页面的时候我们经常会用到时间,这里备份一个时间插件和demo

    面向对象程序与设计大作业实验报告.zip

    题目: 设计一个日期类,实现时间的加、减操作。 1. 描述设计和相关算法思路 2. 类体内要定义对日期的初始化构造函数,包含一个重载默认值方式; 3. 日期包括年月日,需要考虑日和月的进位对月年的改变问题,特别注意...

    关于在SQL中如何设置日期

    如何将字符串转化为日期; 还有SQL中其他的有关日期表达或者转化的方法。很有帮助,常会用到,方便查询。

    php使用date和strtotime函数输出指定日期的方法

    本文实例讲述了php使用date和strtotime函数输出指定日期的方法。分享给大家供大家参考。...strtotime — 将任何英文文本的日期时间描述解析为 Unix 时间戳 复制代码 代码如下:date_default_timezone_set(‘Asia

    javascript格式化日期时间方法汇总

    本文给大家汇总介绍了javascript格式化日期时间的五种常用方法,个人对第五种个性化输出时间比较有兴趣,基本上只要项目中能用到都是使用第五种,推荐给小伙伴们。

    PHP中Date()时间日期函数的使用方法小结

    默认是当前的日期和时间 要找出前一天的时间就是 time()-60*60*24; 要找出前一年的时间就是 time()*60*60*24*365 那么如何把这个数字换成日期格式呢 ,就要用到date()函数了 $t=time();www.3ppt.com echo date(“y-m...

    常用的C#日期格式化

    C#日期格式化 ...为了达到不同的显示效果有时,我们需要对时间进行转化,默认格式为:2007-01-03 14:33:34 ,要转化为其他格式,要用到DateTime.ToString的方法(String, IFormatProvider),如下所示:

    js时间日期格式化封装函数

    js虽然提供了各种获取时间Date对象的不同属性方法,如:getDate 方法 | getDay 方法 | getFullYear 方法 | getHours 方法 … … 等等,但是却没有像java那样提供一个方法来供用户来根据自身提供的模板(pattern),...

    ios 日期选择器

    最近做项目的时候偶然用到只显示年月的日期选择器,刚开始也是一筹莫展,后来从网上搜索了几个Demo感觉可以用,优化了下里面的方法,分享一下。

    SQL Server各种日期计算方法(收藏)

    在这篇文 章里,我将告诉你如何使用DATEADD和DATEDIFF函数来计算出在你的程序中可能你要用到的一些不同日期。 在使用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果...

    javascript日期格式化方法汇总

    本文给大家汇总介绍了javascript格式化日期时间的几种常用方法,个人对最后一种个性化输出时间比较有兴趣,基本上只要项目中能用到都是使用这种,推荐给小伙伴们。

    ant design vue中日期选择框混合时间选择器的用法说明

    首先时间格式化用到moment方法,需要在页面中引入moment组件 import moment from ‘moment’ 结构代码: &lt;a&gt; triggerNode[removed] format=YYYY-MM-DD HH:mm:ss v-decorator=[ 'pushtime', { rules: [{ ...

    C++ 时间转换与表示

    本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和...

Global site tag (gtag.js) - Google Analytics