4

我有一个函数,它使用 NSDateFormatter 将 RFC3339 中的 NSString 转换为 NSDate,但我不知道如何考虑时区做相反的事情。

字符串到 NSDate 转换的相关部分是:

    // The result of a call to systemTimeZone is cached by the app automatically, if the user changes it that change isn't 
    // reflected unless resetSystemTimeZone is called to clear the cache.
    [NSTimeZone resetSystemTimeZone]; 
    NSLocale *enUSPOSIXLocale;
    enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
    [sRFC3339DateFormatter setLocale:enUSPOSIXLocale];
    if ([fromString hasSuffix:@"Z"] || [fromString hasSuffix:@"z"])
    {
        [sRFC3339DateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
    }
    else 
    {
        [sRFC3339DateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    }

[sRFC3339DateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];

我的问题是,当从 NSDate 转换为 NSString 的另一个方向时,我怎么知道用什么来调用 setTimeZone?当通过查看 Z 的缺失/存在从字符串转到 NSDate 时。但是如果我有一个 NSDate,我怎么知道将格式化程序设置为哪个时区?

4

1 回答 1

2

您的 NSDate 存储为 UTC/GMT 时区。因此,当您将其转换为字符串时,您可以选择要在其中显示字符串的时区。没有“正确”的答案。这是您想要显示的任何内容。

于 2012-05-09T00:00:05.617 回答