2011-06-09 55 views
0

我試圖將字符串轉換爲日後使用下面的代碼到的NSDate:時區加入到使用小時nsdateformatter

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
//Translate 2011-06-08T08:05:00.000-08:00 into 2011-06-08T08:05:00.000-0800 
stringDate = [stringDate stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange([aDate length] - 5, 5)]; 
[dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss.SSSZZZ"]; 
NSDate *dateFromString = [dateFormatter dateFromString:stringDate]; 

(2011-06-08T08:00 05:00.000-08)在這一點上,dateFromString是2011-06-08 16:05:00 +0000。我真正想要的是dateFromString 2011-06-08 08:05:00 -0800。我究竟做錯了什麼?

謝謝!

+0

此外,您可能需要將輸出的時區設置爲-0800 GMT。 – PengOne 2011-06-09 16:14:57

+0

鏈接無法幫助。關於時區,我已經嘗試過使用[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:time_zone]]; time_zone是UTC或GMT,但沒有任何變化。 – 2011-06-09 16:18:53

+0

GMT是+0000,對嗎?所以它工作。 – PengOne 2011-06-09 16:19:51

回答

0

所以這不會有直接的答案,並會假設你的字符串格式將是相同的。我們要提取時區部分(最後5個字符),然後計算我們離開GMT的秒數。 NSTimeZone有一個方便的方法timeZoneForSecondsFromGMT:,這將幫助我們得到我們需要的東西。這是你需要添加到問題中的代碼。

NSString * zoneString = [stringDate substringFromIndex:([stringDate length] - 5)]; 
NSTimeInterval timeInterval = [[zoneString substringToIndex:3] intValue] * 3600; 
timeInterval += [[zoneString substringFromIndex:3] intValue] * 60; 

NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeInterval]]; 
[formatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss ZZZ"]; 
NSLog(@"%@", [formatter stringFromDate:dateFromString]); 

希望這可以幫助你。如果您已經找到更好的答案,請告訴我們。

原來的答案
一兩件事有關NSDate是,回來的時候總是在GMT。你不能改變這一點。您將不得不使用NSDateFormatter將其正確打印。事情是這樣的,

NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; 
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"PST"]]; 
[formatter setTimeStyle:NSDateFormatterFullStyle]; 
[formatter setDateStyle:NSDateFormatterFullStyle]; 
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]); 

所以設置時區的格式,它dateForString:也無濟於事。當你需要不同的時區時,你需要創建一個新的。

+0

感謝您的回覆。問題在於時區是PST的假設。事先沒有辦法知道。我嘗試使用strptime_l,如http://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1中所述,但格式我供應只是不起作用。 – 2011-06-09 17:58:45

+0

我基本上需要固定格式,非本地化的日期。 – 2011-06-09 17:59:21

+0

更新了答案。它的工作原理,但不是直接的。根據問題 – 2011-06-12 21:36:07