首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 開發:正確使用 NSDateFormatter 將字串轉換為 NSDate

     編輯:程式設計綜合問答

問題背景

在 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 應為單個 a

正確解決方案

NSString *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
hh12小時制小時05
mm分鐘30
aAM/PM 標記pm

最佳實踐建議

  1. 固定 locale:設定 dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 確保解析穩定
  2. 重用 formatter:避免頻繁建立/銷毀,提升效能
  3. 處理時區:根據需求設定 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(@"格式不匹配,請檢查輸入字串");
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved