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)

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


  • 下一班高鐵 (nextTHSR)

    這個 app 只要開啟後,就根據定位幫你過濾出最近高鐵站的時刻表,不用再按任何按鈕了,方便您在很快時間內確定要坐的哪一班高鐵


  • 下一班公車(nextBus)

    這個 app 只要開啟後,就根據定位幫你過濾出附近站牌的時刻表,以及提供相關公車預計到站的時間,方便您在很快時間內確定要坐的哪一班公車


  • 照片去背(PhotoEraser)

    一款方便移除背景的工具,產生透明背景圖可以存回原本相簿,也可分享到其他 App 使用.


  • 國道一路通(FreeWay)

    打開定位即實際地圖上繪製所在地中心附近的車況圖,可縮放地圖,不再是小小的縮小圖,快速了解高速公路的路況。


  • 下一班火車 (nextRail)

    這個 app 只要開啟後,就根據定位幫你過濾出最近火車站的時刻表,不用再按任何按鈕了,方便您在很快時間內確定要坐的哪一班火車