2010-09-14 21 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

相关问题