2009-08-28 74 views
6

我將NSDates存儲爲您在NSDate中調用說明時獲得的國際格式的文件。將NSDate的描述轉換爲NSDate?

但是,我不知道如何從字符串格式返回到NSDate對象。 NSDateFormatter似乎只限於幾種不包括國際版本的格式。

我應該怎樣從字符串格式回去?

回答

25

傑夫是對的,NSCoding可能是序列化NSDate對象的首選方式。無論如何,如果你真的想/需要將日期保存爲一個明確的日期字符串,這可能會幫助你:

實際上,NSDateFormatter根本不限於預定義的格式。您可以通過dateFormat屬性設置任意自定義格式。下面的代碼應該能夠以「國際格式」解析日期字符串,即。格式NSDate-description用途:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ"; 
NSDate* date = [dateFormatter dateFromString:@"2001-03-24 10:45:32 +0600"]; 

有關格式字符串語法一個完整的參考,看看在Unicode standard

但是,請注意-description - 這些方法的輸出通常針對人類閱讀器(例如日誌消息),並且不保證它不會在新的SDK版本中更改其輸出格式!您應該使用相同的日期格式化程序來序列化您的日期對象:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ"; 
NSString* dateString = [dateFormatter stringFromDate:[NSDate date]]; 
+0

是的,我需要跨平臺的可交換日期字符串。這應該解決它。謝謝! – 2009-08-29 08:39:32

0

我想嘗試建立一個NSDateFormatter通過下面的方法成功地解析字符串:

- (NSDate *)dateFromString:(NSString *)string 

注意,這可能需要一段時間來讓NSDateFormatter設置恰到好處地成功解析你的字符串。

如果您要存儲這樣的面向程序的數據,我還建議以易於訪問的格式存儲它,例如CFAbsoluteTime。一旦你在程序中擁有它,你可以將它格式化爲國際格式或其他人可讀的格式。

4

而不是將描述保存到文件,爲什麼不保存對象本身? NSDate符合NSCoding協議;保存對象意味着您不必擔心翻譯它。有關更多信息,請參見NSCoding protocol reference

0

將其轉換爲NSDate接受的格式,然後執行轉換。

或者,取決於您指的是哪個NSDate(!)initWithString應該覆蓋國際標準日期。

+0

不幸的是,現在'initWithString:'已被棄用。 – ThomasW 2012-10-11 07:57:19