【问题标题】:Convert an NSDate's description into an NSDate?将 NSDate 的描述转换为 NSDate?
【发布时间】:2009-08-28 20:46:19
【问题描述】:

我将我的 NSDate 存储到一个国际格式的文件中,当您在 NSDate 上调用 description 时会得到该格式。

但是,我不知道如何从字符串格式返回到 NSDate 对象。 NSDateFormatter 似乎仅限于几种格式,不包括国际格式。

我应该如何从字符串格式返回?

【问题讨论】:

    标签: iphone serialization date nsdate


    【解决方案1】:

    Jeff 是对的,NSCoding 可能是序列化NSDate 对象的首选方式。无论如何,如果您真的想要/需要将日期保存为纯日期字符串,这可能会对您有所帮助:

    实际上,NSDateFormatter 根本不限于预定义的格式。您可以通过dateFormat 属性设置任意自定义格式。以下代码应该能够解析“国际格式”的日期字符串,即。 NSDate-description 格式使用:

    NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ";
    NSDate* date = [dateFormatter dateFromString:@"2001-03-24 10:45:32 +0600"];
    

    有关格式字符串语法的完整参考,请查看Unicode standard

    但是,请注意-description - 这些方法的输出通常针对人类读者(例如日志消息),并且不能保证它不会在新的 SDK 版本中更改其输出格式!您应该使用相同的日期格式化程序来序列化您的日期对象:

    NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ";
    NSString* dateString = [dateFormatter stringFromDate:[NSDate date]];
    

    【讨论】:

    • 是的,我需要跨平台的可交换日期字符串。这应该解决它。谢谢!
    【解决方案2】:

    与其将描述保存到文件中,不如保存对象本身? NSDate 符合NSCoding 协议;保存对象意味着您不必担心翻译它。请参阅NSCoding protocol reference 了解更多信息。

    【讨论】:

      【解决方案3】:

      我会尝试设置NSDateFormatter,通过以下方法成功解析字符串:

      - (NSDate *)dateFromString:(NSString *)string
      

      请注意,您可能需要一段时间才能正确设置 NSDateFormatter 以成功解析您的字符串。

      如果您要像这样存储面向程序的数据,我还建议您以更易于访问的格式存储它,例如 CFAbsoluteTime。将其放入程序后,您可以将其格式化为国际格式或其他人类可读的格式。

      【讨论】:

        【解决方案4】:

        将其转换为 NSDate 接受的格式,然后再执行转换。

        或者,根据您所指的 NSDate (!) initWithString 应该涵盖国际标准日期。

        【讨论】:

        • 不幸的是,initWithString: 已被弃用。
        猜你喜欢
        • 2011-04-24
        • 2017-04-23
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多