码迷,mamicode.com
首页 > 移动开发 > 详细

iOS中的日历

时间:2017-01-19 22:54:32      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:com   self   localtime   时间   component   today   默认   格式   cal   

iOS自带三种日历,公历、佛教日历和日本日历,要设置日历可以进入"设置-通用-语言与地区-日历"设置,我们中国使用的iPhone默认设置成公历。而泰国人使用的iPhone默认设置的日历是佛教日历。这样会导致同样的代码在国内显示正常,去泰国就仿佛穿越了一般。

 

问题:使用NSDate *today = [NSDate date];获取的当前的时间在国内显示正常是2017年,而到了泰国却变成了2056年,这是为什么呢?即使是时区差别,也不能差如此多呀??

经过仔细思考,发现语言和地区的设置之中有一个地方可以设置日历,进去把公历改成佛教日历,发现原来显示的2017变成了2056。

 

解决办法:提供一种不受时区、系统日历、本地化等限制,获得公历中的正确的年份、月份、时间等的方法。

Global.h

@property (strong,nonatomic) NSCalendar *calendar;
@property (strong,nonatomic) NSDateComponents *components;
@property (copy,nonatomic) NSString *year;
@property (copy,nonatomic) NSString *month;
@property (copy,nonatomic) NSString *day;
@property (copy,nonatomic) NSString *hour;
@property (copy,nonatomic) NSString *minute;
@property (copy,nonatomic) NSString *second;

Global.m

- (NSCalendar *)calendar{
    if(!_calendar){
#ifdef __IPHONE_8_0
        _calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];//根据Identifer获取公历
#else
        _calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];//根据Identifer获取公历
#endif
        _calendar.timeZone = [NSTimeZone localTimeZone];//消除时区差异
        _calendar.locale = [NSLocale currentLocale];//消除本地化差异,本地化包括语言、表示的日期格式等
    }
    
    return _calendar;
}

- (NSDateComponents *)components{
    if (!_components) {
        NSDate *date = [NSDate date];
        _components = [self.calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond | NSCalendarUnitWeekday  fromDate:date];
    }
    
    return _components;
}

//返回当前年份
- (NSString *)year{
    if (!_year) {
        _year = [NSString stringWithFormat:@"%04ld",[kGlobal.components year]];
    }
    return _year;
}

//返回当前月份
-(NSString *)month{
    if (!_month) {
        _month = [NSString stringWithFormat:@"%02ld",[kGlobal.components month]];
    }
    return _month;
}

//返回当前号数
- (NSString *)day{
    if (!_day) {
        _day = [NSString stringWithFormat:@"%02ld",[kGlobal.components day]];
    }
    return _day;
}

//返回当前的小时
- (NSString *)hour{
    if (!_hour) {
        _hour = [NSString stringWithFormat:@"%02ld",[kGlobal.components hour]];
    }
    return _hour;
}

//返回当前的分钟
- (NSString *)minute{
    if (!_minute) {
        _minute = [NSString stringWithFormat:@"%02ld",[kGlobal.components minute]];
    }
    return _minute;
}

//返回当前的秒钟
- (NSString *)second{
    if (!_second) {
        _second = [NSString stringWithFormat:@"%02ld",[kGlobal.components second]];
    }
    return _second;
}

 

iOS中的日历

标签:com   self   localtime   时间   component   today   默认   格式   cal   

原文地址:http://www.cnblogs.com/wobuyayi/p/6308819.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!