2011-03-18 118 views
0

我與一個奇怪的情況作鬥爭:相同的代碼在兩個不同的項目中工作不同。這個代碼只是一個空的命令行工具。第二個項目與鏈接的gdata-objectivec-client庫。在使用GData-Objectivec-client時格式化NSDate&NSString的問題

下面是代碼:

static NSString * const dateFormat = @"MM/dd/yyyy HH:mm:ss Z"; 
NSString *tmp_string = @"03/08/2011 10:07:36 +0300"; 

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease] ;  
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setDateFormat: dateFormat ]; 

NSDate *newDate = [dateFormatter dateFromString: tmp_string]; 
NSLog(@"dateFromThatString: %@", newDate); 

在剛剛命令行實用程序的結果是相同

「2011年3月8日10時07分36秒0300」

但在鏈接到它GDATA-的ObjectiveC客戶端的項目,結果被改成

「2011年3月8日7時07分36秒+0000」

我不能找到什麼問題,有什麼建議?

+0

檢查'dateFormatter'的'formatterBehavior'屬性可能是值得的,看它是否相同。 – 2011-03-21 08:15:57

+0

我已經檢查過這個屬性,在這兩種情況下它都有0x410的值。 – zkaje 2011-03-21 08:38:04

+0

可能是由於newDate對象是一樣的,問題就在於我的NSLog?可能是它會詢問NSDate的不同描述,如果我確實要求desctiptionWithLocale :,那麼它會給我的位置的文本描述的正確時間,但我不喜歡結果,因爲我只想要相同的字符串,就像它是在輸入中,我希望位置以+ -HHHH表示,但不是在文本 – zkaje 2011-03-21 08:42:20

回答

1

閱讀關於此主題,我瞭解到「NSDate不知道時區,它始終以時區獨立的方式存儲日期(作爲自特定引用日期以來的時間跨度)」,所以這兩個NSDate在兩個不同的項目中表示兩個不同字符串的對象是相同的,NSDate對象的描述之間存在差別,所以這對於未來的工作不是什麼大問題,因爲我只需要這些描述來進行簡單的調試。我只是不使用描述方法,而是[NSFormatted stringFromDate:]。

有趣的是,gdata-objectivec-client如何影響項目,nsdate obj的描述返回的是同一時間,但是響應+0000 gmt偏移量。

但這只是討論。

0

看起來日期格式化程序在每種情況下都有不同的時區。您可以使用-[NSDateFormatter setTimeZone:]更改時區。

+0

nope中,時區是相同的,我剛剛檢查過它:/ – zkaje 2011-03-21 06:48:06