ios 日期时间的使用

作者QQ:415074476

QQ群:191280586

1.工作中遇到的问题:

NSString *dateStr = @"Fri Dec 03 18:30:01 +0800 2010";
NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"EEE MMM dd HH:mm:ss zzz yyyy"];

NSDate *date = [dateformatter dateFromString:dateStr];
[dateformatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString *dateString = [dateformatter stringFromDate:date];
NSLog(@"%@",dateString);

这段代码 在真机上打印不出“dateString”,而在模拟器上可以打印出来,真机的系统是IOS5.0,
解决办法如下:

    [dateformatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];

2.关于setTimeZone

从字符串转换成日期
setTimeZone 是指定字符串当前使用的时区
从日期转换成字符串
setTimeZone 是指要转换成目标字符串使用的时区

 

3.时间API使用总结:

 

1.使用NSDate获取时间

2.使用NSDateFormatter做时间格式的转换

3.需要使用时分秒等信息时,先获得NSDate,再使用NSDateComponents解析NSDate.

NSDate * startDate = [[NSDate alloc] init];

NSCalendar * chineseCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSUInteger unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit |

NSSecondCalendarUnit | NSDayCalendarUnit  |

NSMonthCalendarUnit | NSYearCalendarUnit;

NSDateComponents * cps = [chineseCalendar components:unitFlags fromDate:startDate];

NSUInteger hour = [cps hour];

NSUInteger minute = [cps minute];

!importance: 千万不要通过字符串截取的方式.因为NSDate永远是返回格式威治时区的时间, 而NSDateComponents解析时,会把时区再转成本地时区.