20

我正在初始化我的 NSDateFormatter :

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"];
4

2 回答 2

23

如果您不想显示时区,请从格式字符串中删除尾随的“z”字符。

编辑

另一方面,如果您只想显示时区名称,只需将“z”设为大写即可。((编辑:为命名时区保留“z”小写字母,即 PST,为 -0800 保留大写“Z”))

编辑

小写“z”适用于所有其他时区,但不幸的是 GMT 是一个特例。因此,最简单的做法是省略“z”并将“GMT”附加到格式化日期。

于 2010-09-14T19:21:36.710 回答
4

接受的答案有错字。

另一方面,如果您只想显示时区名称,只需将“z”设为大写即可。

为命名时区保留“z”小写,即 PST,为 -0800 保留大写“Z”

    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];

//2013 年 1 月 23 日(星期三)12:33:46 PST -0800

于 2013-01-23T20:35:48.007 回答