ISO 8601時間格式
服務器返回來的時間字符串格式是這種:“2017-09-30T09:00:00”,比一般時間字符串中間多了個字母“T”,網(wǎng)上搜了一下這種時間字符串格式是ISO 8601標準。
ISO 8601:國際標準化組織的國際標準ISO 8601是日期和時間的表示方法,全稱為《數(shù)據(jù)存儲和交換形式·信息交換·日期和時間的表示方法》。目前最新為第三版ISO8601:2004,第一版為ISO8601:1988,第二版為ISO8601:2000。
處理方式:
- (NSString *)timeChange:(NSString *)timeString {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
NSDate *currentDate = [dateFormatter dateFromString:timeString];
NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
[outputFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *timeChanged = [outputFormatter stringFromDate:currentDate];
return timeChanged;
}
NSISO8601DateFormatter
該類(NSISO8601DateFormatter)是在iOS 10才出現(xiàn)的,該類完美的處理了時間問題,即使你的APP涉及國外用戶,只要你們開發(fā)團隊在時間格式上都遵守ISO8601格式,那么你就再也不用擔心時間出錯了。當然,你們也可以使用時間戳。
NSISO8601DateFormatter *ISO8601DateFormatter = [[NSISO8601DateFormatter alloc] init];
NSDate *ISO8601Date = [ISO8601DateFormatter dateFromString:@"2017-06-08T12:00:00+08:00"];
NSLog(@"ISO8601Date = %@", ISO8601Date);
// 注意:美國芝加哥時間(西5區(qū),比中國慢13小時,比0市區(qū)慢5個小時)
ISO8601Date = [ISO8601DateFormatter dateFromString:@"2017-06-08T12:00:00-05:00"];
NSLog(@"ISO8601Date = %@", ISO8601Date);
------------打印結果---------------------
ISO8601Date = 2017-06-08 04:00:00 +0000 // 注釋:東8區(qū)時間轉(zhuǎn)成了0市區(qū)的時間了
ISO8601Date = 2017-06-08 17:00:00 +0000 // 注釋:西5區(qū)時間轉(zhuǎn)成了0市區(qū)的時間了
附加:日期相關格式
字符說明
(:)
時間分隔符。在某些區(qū)域設置中,可以使用其他字符表示時間分隔符。時間分隔符在格式化時間值時分隔小時、分鐘和秒。格式化輸出中用作時間分隔符的實際字符由您的應用程序的當前區(qū)域性值確定。
(/)
日期分隔符。在某些區(qū)域設置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值時分隔日、月和年。格式化輸出中用作日期分隔符的實際字符由您的應用程序的當前區(qū)域性確定。
(%)
用于表明不論尾隨什么字母,隨后字符都應該以單字母格式讀取。也用于表明單字母格式應以用戶定義格式讀取。有關更多詳細信息,請參見下面的內(nèi)容。
d
將日顯示為不帶前導零的數(shù)字(如 1)。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %d。
dd
將日顯示為帶前導零的數(shù)字(如 01)。
EEE
將日顯示為縮寫形式(例如 Sun)。
EEEE
將日顯示為全名(例如 Sunday)。
M
將月份顯示為不帶前導零的數(shù)字(如一月表示為 1)。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %M。
MM
將月份顯示為帶前導零的數(shù)字(例如 01/12/01)。
MMM
將月份顯示為縮寫形式(例如 Jan)。
MMMM
將月份顯示為完整月份名(例如 January)。
gg
顯示時代/紀元字符串(例如 A.D.)
h
使用 12 小時制將小時顯示為不帶前導零的數(shù)字(例如 1:15:15 PM)。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %h。
hh
使用 12 小時制將小時顯示為帶前導零的數(shù)字(例如 01:15:15 PM)。
H
使用 24 小時制將小時顯示為不帶前導零的數(shù)字(例如 1:15:15)。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %H。
HH
使用 24 小時制將小時顯示為帶前導零的數(shù)字(例如 01:15:15)。
m
將分鐘顯示為不帶前導零的數(shù)字(例如 12:1:15)。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %m。
mm
將分鐘顯示為帶前導零的數(shù)字(例如 12:01:15)。
s
將秒顯示為不帶前導零的數(shù)字(例如 12:15:5)。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %s。
ss
將秒顯示為帶前導零的數(shù)字(例如 12:15:05)。
f
顯示秒的小數(shù)部分。例如,ff 將精確顯示到百分之一秒,而 ffff 將精確顯示到萬分之一秒。用戶定義格式中最多可使用七個 f 符號。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %f。
t
使用 12 小時制,并對中午之前的任一小時顯示大寫的 A,對中午到 11:59 P.M 之間的任一小時顯示大寫的 P。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %t。
tt
對于使用 12 小時制的區(qū)域設置,對中午之前任一小時顯示大寫的 AM,對中午到 11:59 P.M 之間的任一小時顯示大寫的 PM。
對于使用 24 小時制的區(qū)域設置,不顯示任何字符。
y
將年份 (0-9) 顯示為不帶前導零的數(shù)字。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %y。
yy
以帶前導零的兩位數(shù)字格式顯示年份(如果適用)。
yyy
以四位數(shù)字格式顯示年份。
yyyy
以四位數(shù)字格式顯示年份。
z
顯示不帶前導零的時區(qū)偏移量(如 -8)。如果這是用戶定義的數(shù)字格式中的唯一字符,請使用 %z。
zz
顯示帶前導零的時區(qū)偏移量(例如 -08)
zzz
顯示完整的時區(qū)偏移量(例如 -08:00)
格式顯示:
M/d/yy
12/7/58
d-MMM
7-Dec
d-MMMM-yy
7-December-58
d MMMM
7 December
MMMM yy
December 58
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