2013-04-30 92 views
3
我有,

奇怪的問題,如果我這樣做:日期轉換問題

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"MMMM d, yyyy EEEE 'at' h:mm a"]; 
NSString *originalDate = [dateFormatter stringFromDate:[NSDate date]]; 
NSLog(@"In Date: %@",originalDate); 
NSDate *newDate = [dateFormatter dateFromString:originalDate]; 
NSLog(@"Out Date: %@",[dateFormatter stringFromDate:newDate]); 

我得到這樣的輸出:

In Date: April 30, 2013 Tuesday at 2:42 PM 
Out Date: December 28, 1999 Tuesday at 2:42 PM 

爲什麼我把它轉換後得到不同的日期字符串和使用相同的格式化程序返回?有沒有辦法讓這個轉換正常工作?

+1

你確定那是你真正的代碼?這顯示'日期:2013年4月30日星期二2:57 PM' /'退房日期:2013年4月30日星期二2:57 PM'(編輯:rmaddy指出,這是一個特定版本中的錯誤iOS的;我在OS X測試,所以一點也不奇怪我得到了不同的結果) – Tommy 2013-04-30 21:58:17

+0

@Tommy你的iOS 5或6的測試下呢? – rmaddy 2013-04-30 22:02:52

+0

我看到一個可可CLI程序 – vikingosegundo 2013-04-30 22:12:04

回答

4

這是iOS的6 NSDateFormatter的錯誤不能正確解析有星期名稱的任何地方,除了字符串的開始日期格式。我前一段提交了一個錯誤報告。仍在等待修復。

相同的格式將工作的iOS 5下

更新:基於由vikingosegundo更新我自己的iOS測試的測試。這似乎與OS X下的問題相同。週一格式不是簡單的問題,如果星期幾格式出現在年份格式之後,這是一個錯誤。

+0

非常感謝!我以爲我瘋了。我將「天名」改爲一開始就像魅力一樣運作! – 2013-04-30 22:03:00

+0

這讓我抓狂過,直到我意識到這是在IOS 6 – rmaddy 2013-04-30 22:05:37

+0

的錯誤,我發現在Mac OS X上略有不同的症狀看來,如果當天名指定需要留一年符的。 – vikingosegundo 2013-04-30 22:20:51

1

我能重現此問題在可可命令行程序

工作格式

  • @"EEEE MMMM d, yyyy 'at' h:mm a"
  • @"MMMM EEEE d, yyyy 'at' h:mm a"
  • @"MMMM d EEEE, yyyy 'at' h:mm a"

不工作(相同的症狀作爲重新由OP

  • @"MMMM d, yyyy EEEE 'at' h:mm a"
  • @"MMMM d, yyyy 'at' h:mm a EEEE"

移植所以EEEE天名指定需要留一年符的。
的錯誤也存在於可可在Mac OS X 10.8.3


用於複製和粘貼進一步測試:

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) 
{ 

    @autoreleasepool { 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"MMMM d, yyyy 'at' h:mm a EEEE"]; 
     NSString *originalDate = [dateFormatter stringFromDate:[NSDate date]]; 
     NSLog(@"In Date: %@",originalDate); 
     NSDate *newDate = [dateFormatter dateFromString:originalDate]; 
     NSLog(@"Out Date: %@",[dateFormatter stringFromDate:newDate]); 
    } 
    return 0; 
} 
+0

什麼版本的OS X你看到這個問題。從Tommy的評論看,它似乎與10.7.5一起正常工作。 – rmaddy 2013-04-30 22:35:26

+0

複製和粘貼在OS X v10.7.5下正常工作;我猜無論是iOS 6的更新和破解,然後遷移到10.8?編輯:我應該補充,如果它有任何區別,我在PST,但與英國區域格式(包括24小時制)。所以如果有一些特定於語言環境的組件用於Apple的bug,那麼我可能會以某種方式避免它。我注意到示例代碼沒有將語言環境設置爲en_US_POSIX。 – Tommy 2013-04-30 22:35:26

+0

10.8.3將其添加到答案中。 – vikingosegundo 2013-04-30 22:37:08