【发布时间】:2018-03-16 00:52:34
【问题描述】:
我们正在定义一个微服务,它以组合的日期和时间 ISO 8601 格式返回时间戳,该时间戳返回给我们用 Swift 编写的 iOS 客户端。在我们的客户端中,这被转换为 Date 对象。
问题是我们的微服务的馈送源之一将它们的日期/时间表示为两个单独的字段,我们必须将它们组合成完整的 ISO 格式。但是,时间部分可能为空,因此我们必须替换为 'T00:00:00Z'。
问题是我们需要一种方法来与 Swift 方沟通时间戳没有原始时间值,因此应该相对于 GST 读取它,而不是像通常那样读取本地时区,它应该仅在 UI 中显示为仅日期。
也就是说,将Date 对象标记为仅限日期的正确方法是什么?我们当前的解决方案是模型上的配对 xIsDateOnly 布尔值,但这看起来很冗长。 Date 对象是否有任何此类机制/指示?我猜不是因为没有时间的日期实际上没有意义,因为日期基于特定时区的凌晨 12 点,通常暗示是用户所在的时间。
【问题讨论】:
-
我真的有单独的
Date和Time类型,以及将它们组合成当前(NS)Date的DateTime -
我自己也这么想过,但仔细想想,没有时间的约会没有任何意义,因为在每一刻,实际上都是两个不同的日期,具体取决于你在哪里在地球上。这就是为什么你必须包含时间组件(以及时区,就此而言。)
-
您可以创建自己的 JSONDecoder DateDecodingStrategy 来处理这两种情况
-
您还可以创建一个始终返回完整日期的计算属性
-
但这只会处理解析。客户如何知道日期具有可丢弃的时间组件与实际有效的时间组件?