一、NSDate,NSDateformatter,获取系统时间,时区,获取UTC时间
//准备一个oc时间的格式化器
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
//获取并设置时间的时区,获取系统时间
NSTimeZone *currentTimezone = [NSTimeZonesystemTimeZone];
[formattersetTimeZone:currentTimezone];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ssEEEE"];
NSArray *currentTimeArray = [[formatterstringFromDate:[NSDate date]] componentsSeparatedByString:@""];
//获得UTC格式时间,0时区
NSTimeInterval unixTime = [[NSDate date]timeIntervalSince1970];
//获得UTC时间
NSDate *utcTime = [NSDatedateWithTimeIntervalSince1970:unixTime];
NSString *utcTimeStr = [[NSString alloc]initWithFormat:@"%@\t\t",utcTime];
二、从nscalendar中获取年月日,从nstimezone中获取时区
//获得系统时间
NSDateFormatter *dateformatter=[[NSDateFormatter alloc]init];
[dateformatter setTimeZone:[NSTimeZonesystemTimeZone]];
[dateformatter setDateFormat:@"HH:mm:ss"];
NSString * timeString=[dateformatter stringFromDate:[NSDatedate]];
//获得系统日期
NSCalendar *calendar = [[NSLocale currentLocale]objectForKey:NSLocaleCalendar];//也可以使用[NSCalendar currentCalendar];
NSUInteger mask = NSDayCalendarUnit | NSMonthCalendarUnit |NSYearCalendarUnit;//8421码二进制求和,这些枚举的声明符合MISRAC Coding Standard
NSDateComponents * dateConponent= [calendarcomponents:mask fromDate:[NSDate date]];//NSDateComponents对象表示一个日期对象的组件——例如年,月,日和小时。如果要使一个NSDateComponents对象有意义,你必须将其与一个日历对象相关联。
NSString *nsDateString= [NSString stringWithFormat:@"M/d/- %@", [dateConponentyear], [dateConponent month], [dateConponentday],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: 毫秒
[calendarcomponents:mask fromDate:[NSDatedate]]中的mark来自多个枚举:
typedefCF_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),
kCFCalendarUnitWeekOfMonthCF_ENUM_AVAILABLE(10_7, 5_0) = (1UL<< 12),
kCFCalendarUnitWeekOfYearCF_ENUM_AVAILABLE(10_7, 5_0) = (1UL<< 13),
kCFCalendarUnitYearForWeekOfYearCF_ENUM_AVAILABLE(10_7, 5_0) = (1UL<< 14),
};