从 String 创建 DateComponents / NSDateComponents,反之亦然

create DateComponents / NSDateComponents from String and vice versa

是否有一种(优雅的或首选的)方法将 DateComponents 对象转换为 String 并返回,以便

DateComponents -> String -> DateComponents

总是可能的并且生成的对象等于原始对象? (不完全相同)(如 CustomStringRepresentable

对于 NSDate / Date 有一个 NSDateFormatter / DateFormatter 可以做到这一点,来回转换。

对于DateComponents有一个DateComponentsFormatter,但在我看来不支持从StringDateComponents的方向。

这个问题的动机

HealthKit 曾经将生日存储为 NSDate 到 iOS 9.x。

从 iOS 10 开始,HealthKit 使用 DateComponents 作为生日模型。 (并弃用 NSDate 生日)

我试图在我自己的以 HealthKit 为中心的应用程序的数据模型中反映 HealthKits 模型的变化。最直接的方法是像 HealthKit 那样在我的模型中使用 DateComponents

因为我需要将我的模型保存到一个文件并再次加载它,这个问题的答案将使我能够做到这一点。

明显的回退是将 DateComponents 转换为 Date 并保存。但是 Apple 弃用生日 Date 一定有充分的理由。

因为 NSDateComponents 符合 NS(Secure)Coding.

,所以直接通过 NSKeyedArchiver 保存日期组件