NSDateFormatter
在获取sugarsync网盘的accessToken时候,得到了过期时间。但是这里的过期时间采用的是世界标准时间UTC,而该网盘是国外的,所以在国内显示的时间就不对了,需要转换为当地时间。这就涉及到NSDateFormatter类。
经常看到在取时间的时候,往往要通过NSDateFormatter转换一下,因为[NSDate date]得到的时间是世界标准时间(格林尼治时间),与本地时间存在时差。所以需要用如下方式来转换得到本地时间字符串:
NSDate* date = [NSDate date];
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormatter:@”yyyy-MM-dd HH:mm:ss”];
NSString* dateStr = [formatter stringFromDate:date];
这里的HH表示24小时时间制,也可以采用hh的12小时时间制,那一般还需要加上“aa”表示am或者pm;如果加上EEEE,则表示星期几。至于其他的转换字符串格式什么的就不讨论了,这里要重点讨论一下从时间字符串转换得到NSDate对象。
当然[formatter dateFromString:]方法是需要采用的。UTC时间字符串例如下面的示例“2014-3-24T15:16:23+0800”,这里包含了日期和时间,还有时区。采用上面的formatter是不行的;有时候UTC的字符串比较长,例如“2014-3-24T15:16:23.561+07:00”。好吧,这样转换也会失败的。
针对第一种UTC时间字符串我们需要换一个formatter:
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormatter:@”yyyy-MM-dd’T’ HH:mm:ssZ”];
[formatter setTimeZone:[NSTimeZone localTimeZone]];
NSDate* date = [formatter dateFromString:expirationDate];
第二种UTC时间字符串则需要先将其变换为第一种字符串,再用formatter。