2011-06-11 99 views
2

我已在NSDateFormatter以下:的NSDate未進行轉換正確地使用NSDateFormatter

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MMM. d, yyyy"]; 

NSLocale *usLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setLocale:usLocal]; 

和我有一個while循環,其開始於一個給定的開始日期和,直到它到達一個特定的結束日期遞增一個日期。

NSDate *d = start; 
while(YES){  
    NSString *td = [dateFormatter stringFromDate:d]; 
    NSLog(@"converted date %@ to %@",d,td); 
    ...adds a date and re-initializes d 
} 

而且我得到的輸出,如下列:

2011-06-11 17:10:18.678 ListOf100[8784:707] converted date 2011-05-31 00:00:00 +0000 to May. 30, 2011 
2011-06-11 17:10:18.687 ListOf100[8784:707] converted date 2011-06-01 00:00:00 +0000 to May. 31, 2011 
2011-06-11 17:10:18.717 ListOf100[8784:707] converted date 2011-06-02 00:00:00 +0000 to Jun. 1, 2011 

正如你可以看到,所有日期不正確轉換。他們都休息了一天。爲什麼會發生這種情況?我該如何解決它?

+2

你可以發表你如何重新初始化「d」嗎? – Sai 2011-06-11 21:26:05

+0

這不是問題。即使是第一次這是錯的。 – CodeGuy 2011-06-11 21:32:26

+0

你應該向Apple報告這個錯誤。我同意@Sai,你應該發佈代碼,以便我們可以測試它是否可重現。 – 2011-06-11 22:34:47

回答

3

在我看來在比一個格式化的工作中不同時區

NSDate * d = [NSDate dateWithTimeIntervalSince1970:800000];  
// Arbitrary date 

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MMM. d, yyyy"]; 

NSLocale *usLocal = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setLocale:usLocal]; 


//!!!: Set time zone 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

NSString *td = [dateFormatter stringFromDate:d]; 
NSLog(@"converted date %@ to %@",d,td); 

產量:

2011-06-11 22:44:01.642添eZoneFormatter [21901:207]轉換日期1970-01-10 06:13:20 +0000到1970年1月10日

1

不知道爲什麼它的發生,但如果它的持久性,修復它不應該將其轉換之前是不是增加一天d困難:像正在創建的日期

NSString *td = [dateFormatter stringFromDate:[d dateByAddingTimeInterval:86400]]; 
相關問題