Xcode iOS ObjectiveC 下的 NSDateFormatter 日期時間

2015/10/07
~ 阿亮 ~

一般時間日期會用以下的程式碼來取得:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm"];
NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];

但,如果你的程式若有牽涉到用時間日期來做資料擷取、認證等問題時,就有些東西要注意了。

比如,就我的例子可能手機大都用台灣時間,加上伺服器也調成台灣時間的話,自己測試的話,就當然很順,但如果使用者手機設不是台灣時間呢?那時間就會對不起來了。

解決的方法就是手機在算時間日期時,加上 timeZone,

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Taipei"]];
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm"];
NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];

另外,可能一般會比較沒注意到,試著將「西曆」改設定成「日本曆」,這時 dateFormat 的 yyyy 會回傳 0027,而不是西元的 2015! 這代表在日本曆的「平成27年」。

解決的方法就是設定西曆 (NSGregorianCalendar),完整的日期時間取得的程式碼就是如下了。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Taipei"]];
[dateFormatter setCalendar: [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]];
[dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm"];
NSString *todayStr = [dateFormatter stringFromDate:[NSDate date]];

呼~會整死人的啊,在這之前,壓根不知外國人若設成其他非西曆者,根本不能用啊… >”<



站內搜尋



本站其他服務

本站其他軟體



  • 台灣空污警報(AirInfo)

    設定特定站點為推播通知關注點後,當該站點空氣品質變糟時,即時推播通知給您。另外提供站點附近基本天氣預測資料。


  • 條碼掃描器(QRCode)

    支援 QRCode and Barcodes、可連續快速掃描、自動對焦、可打開手電筒供掃描時使用


  • 下一台單車(NextBike)

    打開定位即搜尋附近二十點自行車站點,不塞滿全部站點資料到整個地圖上,所以畫面簡潔方便看清楚目前所在地,若需要搜尋地圖其他位置附近站點,再點擊地圖即可。


  • 標案快訊

    讓你可以輕鬆追蹤含有您想要關注關鍵詞的任何採購標案,只要有最新的資訊,「標案快訊」即會推播通知給你.


  • 姓名筆畫吉凶查詢系統

    這是一個提供中文字康熙筆畫的小軟體,並根據農民曆計算每個名字或公司名的總筆畫以及最後的吉凶數,共有四種模式


  • 藝文快訊

    讓你可以輕鬆追蹤含有您想要關注關鍵詞的任何藝文活動訊息,只要有最新的資訊,「藝文快訊」即會推播通知給你.