需求:將標準 NSDate(如 2001-01-01 00:00:00 +0000)轉換為 January, 01 2013 04:00:00 格式。
NSDate。NSString *inputStr = @"2012-09-15 00:11:59";
// 1. 解析輸入字符串 -> NSDate
NSDateFormatter *parser = [[NSDateFormatter alloc] init];
[parser setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; // 注意:24小時制用 HH
NSDate *date = [parser dateFromString:inputStr];
// 2. NSDate -> 目標格式字符串
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMM, dd yyyy HH:mm:ss"]; // MMMM = 全寫月份名
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; // 關鍵:指定英文月份
NSString *output = [formatter stringFromDate:date];
NSLog(@"Result: %@", output); // September, 15 2012 00:11:59
| 符號 | 含義 | 示例 |
|---|---|---|
| yyyy | 年(4位) | 2013 |
| MMMM | 月份全稱 | January |
| MMM | 月份縮寫 | Jan |
| dd | 日(2位) | 01 |
| HH | 小時(24制,2位) | 04 |
| hh | 小時(12制,2位) | 04 |
| mm | 分鐘 | 00 |
| ss | 秒 | 00 |
MMMM 輸出系統語言(中文「一月」),導致解析/顯示不一致。HH,12小時制用 hh(需配合 a AM/PM)。NSDateFormatter 非線程安全,高頻調用請緩存或用 NSThread 局部存儲。ISO8601DateFormatter 處理標準格式,性能更優。掌握雙重 Formatter 模式與 locale 設置,精準控制日期輸出格式。