从 String 创建 DateComponents / NSDateComponents,反之亦然
Posted
技术标签:
【中文标题】从 String 创建 DateComponents / NSDateComponents,反之亦然【英文标题】:create DateComponents / NSDateComponents from String and vice versa 【发布时间】:2016-06-18 11:50:34 【问题描述】:是否有一种(优雅或首选的)方法可以将 DateComponents 对象转换为字符串并返回,以便
DateComponents -> String -> DateComponents
总是可能的并且结果对象等于原始对象? (不相同)(如CustomStringRepresentable
)
对于NSDate
/ Date
有一个NSDateFormatter
/ DateFormatter
能够做到这一点,来回转换。
对于DateComponents
,有一个DateComponentsFormatter
,但在我看来不支持从String
到DateComponents
的方向。
这个问题的动机
HealthKit 用于将生日存储为 NSDate
,直到 ios 9.x。
从 iOS 10 开始,HealthKit 使用DateComponents
作为生日模型。 (并且在生日时已弃用 NSDate
)
我试图在我自己的以 HealthKit 为中心的应用程序的数据模型中反映 HealthKits 模型的变化。最直接的方法是在我的模型中使用 DateComponents
,就像 HealthKit 一样。
由于我需要将模型保存到文件中并再次加载,因此这个问题的答案将使我能够做到这一点。
明显的后备是将DateComponents
转换为Date
并保存。但是,Apple 在生日时弃用 Date
肯定是有充分理由的。
【问题讨论】:
能否请您详细说明组件和字符串之间的关系以及字符串格式。 我不太关心字符串格式。任何有效的东西。如果开发人员出于调试原因可以阅读它会很好。 【参考方案1】:只需通过NSKeyedArchiver
直接保存日期组件,因为NSDateComponents
符合NS(Secure)Coding
。
【讨论】:
感谢您的回答。我为我的问题添加了动机,因为您的回答表明日期计算不是问题。它是找到苹果给我的数据的字符串表示。 很抱歉,您在几个小时前提出问题时没有描述实际问题。 我询问了如何将 DateComponents 表示为 String 以及如何将 String 表示为 DateComponents。我不知道这会触发“不要那样做”的答案。对不起。 但是问题出在哪里?(NS)Date
类根本不被弃用。只是生日表示发生了变化。所以你可以放心地使用我的建议将DateComponents
转换为String
,反之亦然。
顺便说一句:NSDateComponents
符合NS(Secure)Coding
所以你可以直接通过NSKeyedArchiver
保存日期组件以上是关于从 String 创建 DateComponents / NSDateComponents,反之亦然的主要内容,如果未能解决你的问题,请参考以下文章
从 String 创建 DateComponents / NSDateComponents,反之亦然