【问题标题】:How can you represent a Date object that should ignore the time?你如何表示一个应该忽略时间的 Date 对象?
【发布时间】:2018-03-16 00:52:34
【问题描述】:

我们正在定义一个微服务,它以组合的日期和时间 ISO 8601 格式返回时间戳,该时间戳返回给我们用 Swift 编写的 iOS 客户端。在我们的客户端中,这被转换为 Date 对象。

问题是我们的微服务的馈送源之一将它们的日期/时间表示为两个单独的字段,我们必须将它们组合成完整的 ISO 格式。但是,时间部分可能为空,因此我们必须替换为 'T00:00:00Z'。

问题是我们需要一种方法来与 Swift 方沟通时间戳没有原始时间值,因此应该相对于 GST 读取它,而不是像通常那样读取本地时区,它应该仅在 UI 中显示为仅日期。

也就是说,将Date 对象标记为仅限日期的正确方法是什么?我们当前的解决方案是模型上的配对 xIsDateOnly 布尔值,但这看起来很冗长。 Date 对象是否有任何此类机制/指示?我猜不是因为没有时间的日期实际上没有意义,因为日期基于特定时区的凌晨 12 点,通常暗示是用户所在的时间。

【问题讨论】:

  • 我真的有单独的 DateTime 类型,以及将它们组合成当前 (NS)DateDateTime
  • 我自己也这么想过,但仔细想想,没有时间的约会没有任何意义,因为在每一刻,实际上都是两个不同的日期,具体取决于你在哪里在地球上。这就是为什么你必须包含时间组件(以及时区,就此而言。)
  • 您可以创建自己的 JSONDecoder DateDecodingStrategy 来处理这两种情况
  • 您还可以创建一个始终返回完整日期的计算属性
  • 但这只会处理解析。客户如何知道日期具有可丢弃的时间组件与实际有效的时间组件?

标签: swift date datetime time


【解决方案1】:

你说得对,Foundation (NS)Date 对象实际上是一个时间戳,代表一个特定的时刻。虽然它不允许您只指定特定日期,但它确实具有无论使用什么日历都相同的优点。

要表示类似“2014 年 6 月 3 日”的内容,您可以使用 DateComponents 对象。这使您可以指定相对于特定日历的月、日、年等,而无需指定一天中的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多