2010-09-14 84 views
20

我正是如此初始化我NSDateFormatter:轉換的NSDate到的NSString不格林尼治標準時間修改

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss z"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
NSDate *date = [NSDate date]; 
NSString *dateString = [dateFormatter stringFromDate:date]; 

dateString現在是:

Thu, 29 Jul 2010 14:58:42 GMT+00:00 

我想擺脫的「+ 00:00「

我從http://unicode.org/reports/tr35/tr35-6.html#Time_Zone_Fallback猜測我可能有本地化問題。我正在通過手動刪除「+00:00」來解決此問題,但這並不理想。

編輯

我嘗試了一些新的方法來創建NSTimeZone,但他們都產生相同的dateString

[NSTimeZone timeZoneWithName:@"GMT"]; 
[NSTimeZone timeZoneWithName:@"UTC"]; 
[NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 
+1

對於有趣的問題+1。我無法弄清楚自己。順便說一句,你可能想知道使用'z'說明符可能的內存泄漏:http://thegothicparty.com/dev/article/nsdateformatter-memory-leak/ – 2010-09-14 19:48:27

+1

+1使用「因此」 – 2012-08-31 20:27:59

回答

23

從格式字符串,如果刪除尾隨「Z」字你不想顯示時區。

編輯

在另一方面,如果你只是想顯示的時區的名稱,只是使「Z」大寫。 ((編輯:離開 'Z' 小寫命名的時區,即PST和大寫字母 'Z' 爲-0800))

編輯

小寫字母 'Z' 工作正常,所有其他時區,但不幸的是,GMT是一個特例。所以最簡單的做法就是省略'z'並在格式化的日期附加「GMT」。

+0

OP想要保留時區的縮寫,但要刪除+00:00位。 – 2010-09-14 19:31:26

+0

啊,然後用大寫'Z'。我會更新我的答案。 – jlehr 2010-09-14 20:04:57

+0

大寫字母'Z'每個RFC 822標準產生「+0000」。我只想要「格林威治標準時間」 – 2010-09-15 18:59:49

4

接受的答案有一個錯字。

在另一方面,如果你只是想顯示的時區的名稱,只是使「Z」大寫。

離開命名時區的 'Z' 小寫,即PST和大寫爲-0800

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
    [format setDateFormat:@"MMMM dd, yyyy (EEEE) HH:mm:ss z Z"]; 
    NSDate *now = [NSDate date]; 
    NSString *nsstr = [format stringFromDate:now]; 

'Z' // 2013年1月23日(星期三)12時33分46秒的PST -0800

相關問題