我以GMT格式在服務器上存儲值。 我下載他們的設備上,並通過以下功能轉換到用戶本地時間:NSDateFormatter返回2001年1月1日作爲日期
- (void)convertTimeZone
{
//Converts the match timing from GMT to the users local time
NSString *serverDateString = [NSString stringWithFormat:@"%@-%@-%@ %@:%@ GMT", year, month, day, hour, min];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm zzz";
NSDate *serverDate = [dateFormatter dateFromString:serverDateString];
NSString *localDateString = [dateFormatter stringFromDate:serverDate];
NSDate *localDate = [dateFormatter dateFromString:localDateString];
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSHourCalendarUnit |NSMinuteCalendarUnit |NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:localDate];
min = [NSString stringWithFormat:@"%d",[components minute]];
hour = [NSString stringWithFormat:@"%d",[components hour]];
day = [NSString stringWithFormat:@"%d",[components day]];
month = [NSString stringWithFormat:@"%d",[components month]];
year = [NSString stringWithFormat:@"%d",[components year]];
}
幾乎每個人都得到轉換後的適當時間。然而,很少有用戶寫道,他們收到的日期是2001年1月1日,這是iOS和OSX上的初始化日期。 而日期是GMT和當地日期之間的時差。
它們的值,年,月,日,小時和分鐘都被服務器正確設置和接收。我知道這是因爲一些其他值正確顯示。
但是這種日期 - 時間轉換過程在少數情況下出錯。
爲什麼發生?
由於它從來沒有發生過我的設備,但發生在其他國家的用戶,我不知道如何重現它。他們試圖重新啓動它,但他們仍然得到錯誤的日期。 謝謝。
沒有看到您的輸入和輸出,不可能找到您可能已經搞砸的所有地方。 (順便說一句,-1表示當發生「iOS錯誤」的機率極小時)。 –
您的代碼絕對沒有意義 - 您將字符串轉換爲NSDate,將其轉換爲字符串,然後再轉換爲NSDate,全部使用相同的日期格式化程序,並且不更改日期格式化程序設置。你期望改變什麼? –
(你怎麼期望上面的格林威治標準時間轉換爲當地時間?) –