2013-08-21 58 views
-2

我以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和當地日期之間的時差。

它們的值,年,月,日,小時和分鐘都被服務器正確設置和接收。我知道這是因爲一些其他值正確顯示。

但是這種日期 - 時間轉換過程在少數情況下出錯。

爲什麼發生?

由於它從來沒有發生過我的設備,但發生在其他國家的用戶,我不知道如何重現它。他們試圖重新啓動它,但他們仍然得到錯誤的日期。 謝謝。

+0

沒有看到您的輸入和輸出,不可能找到您可能已經搞砸的所有地方。 (順便說一句,-1表示當發生「iOS錯誤」的機率極小時)。 –

+0

您的代碼絕對沒有意義 - 您將字符串轉換爲NSDate,將其轉換爲字符串,然後再轉換爲NSDate,全部使用相同的日期格式化程序,並且不更改日期格式化程序設置。你期望改變什麼? –

+0

(你怎麼期望上面的格林威治標準時間轉換爲當地時間?) –

回答

1

您使用NSDateFormatter閱讀或發出需要在某些特定格式的日期的任何時候,你會想要做這樣的事情:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]]; 

這將避免顯示的問題例如here

+0

那麼,它會在任何地方工作嗎?我的應用程序不僅以美國爲中心,所以這樣他們都可以使用它嗎?謝謝。 –

+0

是的,這可以在任何地方工作,手動設置區域設置不會干擾您的應用程序的本地化。與時區不同;手動設置它是爲了確保用戶的設備按照您的預期行事,無論其語言或區域設置如何。 – bdesham

1

您無法按照QA1480的要求設置區域設置。因此,您設置的日期格式可能會根據用戶的設置進行修改。

明確設置區域設置來解決問題。

相關問題