分享

与CST,UTC时间,NScalendar,NSTimeZone,NSLocale有关的用法总结

 plumbiossom 2014-05-13
一、NSDate,NSDateformatter,获取系统时间,时区,获取UTC时间
//准备一个oc时间的格式化器
        NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
//获取并设置时间的时区,获取系统时间
        NSTimeZone *currentTimezone = [NSTimeZone systemTimeZone];
        [formatter setTimeZone:currentTimezone];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss EEEE"];
        NSArray *currentTimeArray = [[formatter stringFromDate:[NSDate date]] componentsSeparatedByString:@" "];
//获得UTC格式时间,0时区
        NSTimeInterval unixTime = [[NSDate date] timeIntervalSince1970];
//获得UTC时间
        NSDate *utcTime = [NSDate dateWithTimeIntervalSince1970:unixTime];
        NSString *utcTimeStr = [[NSString alloc] initWithFormat:@"%@\t\t",utcTime];



二、从nscalendar中获取年月日,从nstimezone中获取时区

//获得系统时间
    NSDateFormatter  *dateformatter=[[NSDateFormatter alloc] init];
    [dateformatter setTimeZone:[NSTimeZone systemTimeZone]];
    [dateformatter setDateFormat:@"HH:mm:ss"];
    NSString *  timeString=[dateformatter stringFromDate:[NSDate date]];
    
//获得系统日期
    NSCalendar *calendar = [[NSLocale currentLocale] objectForKey:NSLocaleCalendar];//也可以使用[NSCalendar  currentCalendar];
    NSUInteger mask = NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit;//8421码二进制求和,这些枚举的声明符合MISRA C Coding Standard
    NSDateComponents * dateConponent= [calendar components:mask fromDate:[NSDate date]];//NSDateComponents对象表示一个日期对象的组件——例如年,月,日和小时。如果要使一个NSDateComponents对象有意义,你必须将其与一个日历对象相关联。
    NSString *nsDateString= [NSString  stringWithFormat:@"M/d/- %@", [dateConponent year], [dateConponent month], [dateConponent day],timeString];
    
    [dateformatter release];


P.S.附录

[dateformatter setDateFormat:@"HH:mm:ss"]格式化参数如下: 
G: 公元时代,例如AD公元 
yy: 年的后2位 
yyyy: 完整年 
MM: 月,显示为1-12 
MMM: 月,显示为英文月份简写,如 Jan 
MMMM: 月,显示为英文月份全称,如 Janualy 
dd: 日,2位数表示,如02 
d: 日,1-2位显示,如 2 
EEE: 简写星期几,如Sun 
EEEE: 全写星期几,如Sunday 
aa: 上下午,AM/PM 
H: 时,24小时制,0-23 
K:时,12小时制,0-11 
m: 分,1-2位 
mm: 分,2位 
s: 秒,1-2位 
ss: 秒,2位 
S: 毫秒 

[calendar components:mask fromDate:[NSDate date]]中的mark来自多个枚举:
typedef CF_OPTIONS(CFOptionFlags, CFCalendarUnit) {
    kCFCalendarUnitEra = (1UL << 1),//unsigned long,枚举被定义为8421码
    kCFCalendarUnitYear = (1UL << 2),
    kCFCalendarUnitMonth = (1UL << 3),
    kCFCalendarUnitDay = (1UL << 4),
    kCFCalendarUnitHour = (1UL << 5),
    kCFCalendarUnitMinute = (1UL << 6),
    kCFCalendarUnitSecond = (1UL << 7),
    kCFCalendarUnitWeek = (1UL << 8) ,
    kCFCalendarUnitWeekday = (1UL << 9),
    kCFCalendarUnitWeekdayOrdinal = (1UL << 10),
    kCFCalendarUnitQuarter CF_ENUM_AVAILABLE(10_6, 4_0) = (1UL << 11),
    kCFCalendarUnitWeekOfMonth CF_ENUM_AVAILABLE(10_7, 5_0) = (1UL << 12),
    kCFCalendarUnitWeekOfYear CF_ENUM_AVAILABLE(10_7, 5_0) = (1UL << 13),
    kCFCalendarUnitYearForWeekOfYear CF_ENUM_AVAILABLE(10_7, 5_0) = (1UL << 14),
};

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多