2014-12-30 89 views
1

今天,我的一位客戶報告了一個應用程序功能突然停止工作的錯誤。 我的單元測試功能後,我才知道NSDateFormatter正在轉換錯誤的日期。也許你也經歷過同樣的事情。下面是我的代碼NSDateFormatter中的問題將NSDate轉換爲字符串

self.frmt2=[[NSDateFormatter alloc]init]; 
[self.frmt2 setDateFormat:@"YYYY-MM-dd」]; 
self.str_DateTogetData=[self.frmt2 stringFromDate:[NSDate date]]; 

如果我的系統日期是29-12-2014,30-12-2014,31-12-2014之間,轉換日期後,再轉換爲字符串的節目29-12-2015,30 -12-2015,31-12-2015但如果我的系統日期是不是這三個日期,然後上面的代碼之間進行轉換的NSDate成字符串correctly.but如果我使用下面的代碼,然後它轉換成NSDate的字符串正確

self.frmt2=[[NSDateFormatter alloc]init]; 
[self.frmt2 setDateFormat:@"yyyy-MM-dd」]; 
self.str_DateTogetData=[self.frmt2 stringFromDate:[NSDate date]]; 

我的問題已解決,但我正在尋求知識爲什麼會發生。 任何人都有答案。

+0

什麼是「b/t」? –

+0

b/t之間,我有更新我的問題 –

+2

這是區別。 http://stackoverflow.com/questions/15133549/difference-between-yyyy-and-yyyy-in-nsdateformatter –

回答

4

yyyy指定日曆年,而YYYY指定年份(「年份周」)。

Date Formatter Documentation,從使用格式字符串檢查的最後2分,以指定自定義格式部分

+1

好事是,在年底程序員注意到不同之處。我想知道在各個應用程序中有多少YYYY是錯誤的。 – gnasher729

+0

這可以理解,但如果你可以看看我的問題有一個1年的日期差異。 **如果我的系統日期在29-12-2014,30-12-2014,31-12-2014之間,那麼在將日期轉換爲字符串後,其顯示29-12-2015,30-12-2015,31-12- 2015 **這不應該發生。因爲我試圖正確打印29-12-2013及其打印件。 –

+0

@ gnasher729是啊:) :) :) :) – arthankamal

1

- 在你的日期格式小錯誤

它採用YYYY指定一年組件。常見的錯誤是使用YYYYyyyy指定日曆年,而YYYY指定ISO年份周曆中使用的年份(「年份周」)。在大多數情況下,yyyyYYYY產生相同的數字,但它們可能不同。通常,你應該使用歷年

您的日期格式應該在這個甲[self.frmt2 setDateFormat:@"yyyy-MM-dd"]

0

你的「知識」是YYYY和YYYY是相同的是完全錯誤的。

在這個線程中已經多次解釋它們並不相同,現在你已經更新了你的問題,說它們是相同的。他們不是。

你是否明白YYYY的作用?這是爲了你數週的情況。 2014年第1周,2014年第2周,等等。從2014年12月29日星期一到2015年3月4日星期日的這個星期是一個星期,因爲它的四個日期是2015年,這是2015年的第一個星期。