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; }