【问题标题】:NSDateFormatter, NSDate, UTC and strange date formatNSDateFormatter、NSDate、UTC 和奇怪的日期格式
【发布时间】:2010-07-20 03:00:09
【问题描述】:

我通过 JSON 收到一个非常奇怪的日期格式。例如- “2010 年 7 月 18 日 02:22:09”

这些日期始终为 UTC。我正在使用 NSDateFormatter 解析日期,并将时区设置为 UTC...

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[inputFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
[inputFormatter setDateFormat:@"MMMM, dd yyyy HH:mm:ss"];
NSDate *formatterDate = [inputFormatter dateFromString:dtStr];

但是,记录的日期与我设备的偏移量一起出现...

“2010-07-18 02:22:09 -0600”

我在这里做错了什么?

【问题讨论】:

    标签: iphone cocoa cocoa-touch


    【解决方案1】:

    我认为这是因为您的 NSDate 没有使用 UTC 时区。文档对 NSDate 的描述方法是这样说的:

    以国际格式 YYYY-MM-DD HH:MM:SS ±HHMM 表示的接收方字符串,其中 ±HHMM 表示与 GMT 的时区偏移(以小时和分钟为单位)(例如,“2001-03-24 10:45:32 +0600”)。

    所以,你并没有做错什么。 NSDate 的行为符合预期。你想达到什么目的?您需要字符串中的日期吗?你在做日期比较吗?

    【讨论】:

    • 谢谢。你是对的。当 NSDate 实际上不存储时区信息时,让它显示偏移量只是令人困惑。
    • 不仅仅是时区信息,还有格式。它不知道它是如何创建的;它不知道它是根据美国长格式日期创建的,也不知道它是使用 UTC 时间创建的。这就是为什么使用当地时间和 ISO 8601 格式进行描述的原因:每个日期都是这样描述自己的,无论它是如何创建的。要获取以特定格式和/或特定时区表示的日期,您需要使用格式化程序来表示日期,这与使用格式化程序解析日期的方式相反。
    • 如果我们需要这种格式“2010-07-18 02:22:09 +0000”怎么办?
    猜你喜欢
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多