2個月前我發佈了我的第一個應用程序到App Store,迄今爲止成功非常出色。但是最近我發現了一個問題。iOS App不同的時區處理日期條目不同
該應用的前提是能夠跟蹤給定和收到的金錢信封。這是一個簡單的應用程序,允許您添加條目,然後在標籤欄中顯示按時間順序排列的時間軸,然後按照其他選項卡中的名稱,事件和年份進行過濾。除了當你改變時區時,它在世界各地運作良好。
該應用程序在後臺使用核心數據,包括一些NSPredicate
檢查,看看「如果你今年選擇已經存在,我會返回它,如果沒有,我將創建一個新的條目的一年」 。因此,如果您有2014年和2013年的一個條目,那麼在年份選項卡中,您將看到2014年的一個條目和2013年的一個條目。如果您爲2014年添加了另一個條目,則不會在2014年看到兩個2014條目年份「選項卡,但仍然是2014年的一個條目(下面列出了所有交易)。
使用UIDatePicker
選擇日期以獲取實際日期。
當您更改時區時會出現問題。如果你這樣做,2014年作爲一年的入口不再被認定爲與之前的2014年相同的入口,因此在年份標籤中,我將結束多個2014年的參賽作品,這當然是沒有意義的。
我發現這與時間有關,下面你可以看到我沒有使用時區,而是使用了NSGregorianCalendar
功能。
NSCalendar *yearCal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *yearComponent = [yearCal components:NSYearCalendarUnit fromDate:self.datePicker.date];
NSDate *selectedYear = [yearCal dateFromComponents:yearComponent];
沒有太多在這裏改變了應用程序的功能(我希望它以同樣的方式工作),我將如何去指定的發言權GMT的時區,但因爲夏令等的,我我希望將它保持在格林威治標準時間下午12點作爲標準,所以無論您身在何處,它都將關注格林威治標準時間12點。
我希望這是有道理的,但任何援助將不勝感激。
感謝,
通常我使用帶有GMT時區的dateFormatter來解析日期字符串,併發送/接收帶有零時區的日期字符串(例如@「01/01/2014 +000」)。 'NSDateFormatter * dateFormatter = [NSDateFormater new]; [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]'。不知道是否正確的解決方案,但它適合我的需求 –
親愛的Mykola - 非常感謝您的答覆,這是有道理的 - 我用馬丁的答案來得到這個工作,但我也明白你的方法 - 欣賞它! – amitsbajaj