1.须要根据时区差设置时间code
+ (NSTimeInterval)getNowTimeIntervalFromatAnTimeInterval:(NSTimeInterval)timeInterval{ //设置源日期时区 // NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];//UTC或GMT NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *filePath = [path stringByAppendingPathComponent:@"user.plist"]; NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithContentsOfFile:filePath]; NSString * sourceTimeZone = dic[@"timezone"]; // Log(@"sourceTimeZone:%@",sourceTimeZone); //设置转换后的目标日期时区 NSTimeZone* destinationTimeZone = [NSTimeZone localTimeZone]; // Log(@"destinationTimeZone:%@",destinationTimeZone); //获得源日期与世界标准时间的偏移量 NSInteger sourceGMTOffset = [sourceTimeZone doubleValue]*60*60; //目标日期与本地时区的偏移量 NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:[NSDate date]]; // Log(@"destinationGMTOffset:%ld",(long)destinationGMTOffset); //获得时间偏移量的差值 NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset; //转为如今时间戳 NSTimeInterval timeIntervalNow = timeInterval - interval; return timeIntervalNow; } //设置时间显示样式 +(NSString *)formattingTime:(NSTimeInterval)timeInterval withStytle:(NSString *)formatStr{ NSTimeInterval timeIntervalNow = [self getNowTimeIntervalFromatAnTimeInterval:timeInterval]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init] ; //把dateFormatter的locale属性改一下,使用语言为英语 NSLocale * usLocale = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US"]; formatter.locale = usLocale; #pragma 格式化时间 [formatter setDateFormat:formatStr];//@"M月d日 HH:mm" NSDate *timeData = [NSDate dateWithTimeIntervalSince1970:timeIntervalNow]; NSString *timeStr = [formatter stringFromDate:timeData]; return timeStr; }
2.格式化各类时间字符说明component
(:)orm
时间分隔符。在某些区域设置中,能够使用其余字符表示时间分隔符。时间分隔符在格式化时间值时分隔小时、分钟和秒。格式化输出中用做时间分隔符的实际字符由您的应用程序的当前区域性值肯定。字符串
(/)get
日期分隔符。在某些区域设置中,能够使用其余字符表示日期分隔符。日期分隔符在格式化日期值时分隔日、月和年。格式化输出中用做日期分隔符的实际字符由您的应用程序的当前区域性肯定。string
(%)it
用于代表不论尾随什么字母,随后字符都应该以单字母格式读取。也用于代表单字母格式应以用户定义格式读取。有关更多详细信息,请参见下面的内容。io
dtable
将日显示为不带前导零的数字(如 1)。若是这是用户定义的数字格式中的惟一字符,请使用 %d。form
dd
将日显示为带前导零的数字(如 01)。
EEE
将日显示为缩写形式(例如 Sun)。
EEEE
将日显示为全名(例如 Sunday)。
M
将月份显示为不带前导零的数字(如一月表示为 1)。若是这是用户定义的数字格式中的惟一字符,请使用%M。
MM
将月份显示为带前导零的数字(例如 01/12/01)。
MMM
将月份显示为缩写形式(例如 Jan)。
MMMM
将月份显示为完整月份名(例如 January)。
gg
显示时代/纪元字符串(例如 A.D.)
h
使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)。若是这是用户定义的数字格式中的惟一字符,请使用 %h。
hh
使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)。
H
使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)。若是这是用户定义的数字格式中的惟一字符,请使用 %H。
HH
使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)。
m
将分钟显示为不带前导零的数字(例如 12:1:15)。若是这是用户定义的数字格式中的惟一字符,请使用%m。
mm
将分钟显示为带前导零的数字(例如 12:01:15)。
s
将秒显示为不带前导零的数字(例如 12:15:5)。若是这是用户定义的数字格式中的惟一字符,请使用%s。
ss
将秒显示为带前导零的数字(例如 12:15:05)。
f
显示秒的小数部分。例如,ff将精确显示到百分之一秒,而 ffff 将精确显示到万分之一秒。用户定义格式中最多可以使用七个 f符号。若是这是用户定义的数字格式中的惟一字符,请使用 %f。
t
使用 12 小时制,并对中午以前的任一小时显示大写的 A,对中午到 11:59 P.M之间的任一小时显示大写的 P。若是这是用户定义的数字格式中的惟一字符,请使用 %t。
tt
对于使用 12 小时制的区域设置,对中午以前任一小时显示大写的 AM,对中午到 11:59 P.M之间的任一小时显示大写的 PM。
对于使用 24 小时制的区域设置,不显示任何字符。
y
将年份 (0-9)显示为不带前导零的数字。若是这是用户定义的数字格式中的惟一字符,请使用 %y。
yy
以带前导零的两位数字格式显示年份(若是适用)。
yyy
以四位数字格式显示年份。
yyyy
以四位数字格式显示年份。
z
显示不带前导零的时区偏移量(如 -8)。若是这是用户定义的数字格式中的惟一字符,请使用 %z。
zz
显示带前导零的时区偏移量(例如 -08)
zzz
显示完整的时区偏移量(例如 -08:00)
格式显示
M/d/yy
12/7/58
d-MMM
7-Dec
d-MMMM-yy
7-December-58
d MMMM
7 December
MMMM yy
December58
hh:mm tt
08:50 PM
h:mm:ss t
8:50:35 P
H:mm
20:50
H:mm:ss
20:50:35
M/d/yyyy H:mm
12/7/1958 20:50
3.日期
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierChinese]; NSDateComponents *weekdayComponents = [gregorian components:NSCalendarUnitWeekday fromDate:timeData]; int _weekday = (int)[weekdayComponents weekday]; NSString *weekDay; switch (_weekday) { case 1: weekDay = @"日"; break; case 2: weekDay = @"一"; break; case 3: weekDay = @"二"; break; case 4: weekDay = @"三"; break; case 5: weekDay = @"四"; break; case 6: weekDay = @"五"; break; case 7: weekDay = @"六"; break; default: break; }