【问题标题】:NSDateFormatter behavior problemNSDateFormatter 行为问题
【发布时间】:2011-03-16 07:05:01
【问题描述】:

我在 iPhone 编程中使用 NSDateFormatter 时遇到问题。 下面是我的代码 sn-p。

NSString *inputDate = @"2011-03-14";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate *entryDate = [formatter dateFromString:inputDate];
[formatter release]

我得到的结果是

2011-03-13 16:00:00 +0000

格林威治标准时间相当于 2011-03-14 00:00:00。 (我的时区是 GMT +08:00)

为什么我会得到这个?如何获得 2011-03-14 00:00:00 作为结果?

谢谢。

~一月

【问题讨论】:

    标签: iphone nsdate nsdateformatter nstimezone


    【解决方案1】:

    您可以使用设置时区

    [formatter setTimeZone:...]
    

    。或者我会尝试通过

    设置格式化程序的语言环境
    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"..."];
    [formatter setLocale:locale];
    

    【讨论】:

    • 感谢您的回复。我都试过了,但结果是相似的。此外,我的格式化程序的时区和语言环境默认正确设置为本地设置。
    【解决方案2】:

    请看一下这个

    NSDateFormatter returns unexpected results

    这是Apple 推荐的

    【讨论】:

    • 感谢您的回复。但是,设置格式化程序的时区似乎并不能解决问题。我试过了,但答案是一样的。
    【解决方案3】:

    您可以尝试将时区添加到原始字符串中

    NSString *inputDate = @"2011-03-14+0800";
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-ddZZZ"];
    NSDate *entryDate = [formatter dateFromString:inputDate];
    [formatter release]
    

    【讨论】:

    • 感谢您的回复。但不幸的是,这不起作用:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多