iOS_OC NSDate / NSString 相互转换
1 时间的获取
NSDate *date = [NSDate date]; 获取GMT时间。
NSTimeZone *zone = [NSTimeZone systemTimeZone]; 获得系统时区
NSTimeZone *localTime = [NSTimeZone localTimeZone]; 获取本地时区
NSInteger timeOff = [zone secondsFromGMT]; zone时区和格林尼治时间差
NSDate *timeOffDate = [date dateByAddingTimeInterval:timeOff]; 时间转换
注:GMT 0:00 格林威治标准时间; UTC +00:00 校准的全球时间; CCD +08:00 中国标准时间 [来自百度百科]
2 获取当前时间的各种信息
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startDate = [NSDate new];
NSDateComponents *dateComps = [cal components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit fromDate:startDate];
int year = [dateComps year];
int month = [dateComps month];
int day = [dateComps day];
int hour = [dateComps hour];
int minute = [dateComps minute];
int second = [dateComps second];
NSLog(@"%d-%d-%d-%d-%d-%d",year,month,day,hour,minute,second); 显示的是本地时区的时间
NSDate *newDate = [cal dateFromComponents:dateComps]; 这个时间是GTM时间
NSRange range = [calendarrangeOfUnit:NSDayCalendarUnitinUnit:NSMonthCalendarUnitforDate:[NSDatedate]];
NSUInteger numberOfDaysInMonth = range.length; 获取当前月份的天数
3 NSString/NSDate 之间的转换
NSDateFormatter *dataFormant = [[NSDateFormatter alloc] init];
[dataFormant setDateFormat: @"yyyy-MM-dd HH:mm:ss.S"];
NSString *dateStr = [dataFormant stringFromDate:[NSDate new]]; 显示:2016-10-31 10:21:30.5
两者之间的转换都用到了了NSDateFormatter,类型差不多,设置好格式后,用stringFromDate或者dateFromString进行转换
注意:NSString转NSDate时,注意待转换的NSString格式应该和设置的转换格式相同。
格式化参数如下:
G: 公元时代,例如AD公元
yy: 年的后2位
yyyy: 完整年
MM: 月,显示为1-12
MMM: 月,显示为英文月份简写,如 Jan//跟系统语言版本有关系,中文显示“3月”,英文显示“Jan”
MMMM: 月,显示为英文月份全称,如 Janualy//跟系统语言版本有关系,中文显示“3月”,英文显示“Jan”
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: 毫秒