在 iOS 開發中,將日期字串轉換為 NSDate 物件是常見需求。許多開發者在使用 NSDateFormatter 時,因日期格式字串設定錯誤導致轉換失敗,回傳 nil。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM:dd, YYYY hh:mm:aa"];
date = [dateFormatter dateFromString:dateString]; // 回傳 nil
上述代碼存在兩個關鍵問題:
: 與實際字串 Mar 13, 2013 05:30pm 不匹配YYYY(週制年份)而非 yyyy(曆法年份)aa 應為單個 aNSString *stringDate = @"Mar 13, 2013 05:30pm";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMM dd, yyyy hh:mmaa"];
NSDate *date = [dateFormatter dateFromString:stringDate];
NSLog(@"Date : %@", date);
| 符號 | 含義 | 範例 |
|---|---|---|
MMM | 月份縮寫 | Mar |
dd | 兩位數日期 | 13 |
yyyy | 四位數年份 | 2013 |
hh | 12小時制小時 | 05 |
mm | 分鐘 | 30 |
a | AM/PM 標記 | pm |
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 確保解析穩定timeZone 屬性NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
formatter.dateFormat = @"MMM dd, yyyy hh:mmaa";
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
NSString *input = @"Mar 13, 2013 05:30pm";
NSDate *date = [formatter dateFromString:input];
if (date) {
NSLog(@"轉換成功: %@", date);
} else {
NSLog(@"格式不匹配,請檢查輸入字串");
}