在NSDateFormatter中保留时区

时间:2011-09-26 07:55:42

标签: cocoa timezone nsdateformatter

我必须为DateFormatter设置格式字符串,以便将NSString转换为NSDate

字符串的格式为:2011-01-31 12:45:00 +0200(y-m-d h:m:s timezone)

我正在使用格式:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss' 'Z",但时区转换为+ 0000并调整小时,因此字符串如下: 2011-01-31 12:45:00 +0200转换为: 2011-01-31 10:45:00 +0000

守则在这里:

- (NSDate *) dateForString: (NSString *)dateString
{
    NSDateFormatter *dateFormatter;
    NSLocale *enUSPOSIXLocale;
    NSDate  *date;

    dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];

    [dateFormatter setLocale:enUSPOSIXLocale];
    [dateFormatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss' 'Z"];
    // [dateFormatter  setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    date = [dateFormatter dateFromString:dateString];
    return date;
}

2 个答案:

答案 0 :(得分:1)

这是使用NSDate时绝对预期的行为 - NSDate代表一个时刻,因此在您的情况下,2个日期/时间是等效的。

只需确保使用dateFormatter显示日期时,您可以将日期格式化程序上的时区设置为您希望的显示方式。

答案 1 :(得分:0)