dateByAddingComponents:toDate:options return 什么时候为零?
When does dateByAddingComponents:toDate:options return nil?
我一直在使用 dateByAddingComponents:toDate:options:
和 dateByAddingUnit:value:toDate:options:
并使用可选绑定来获取日期。像这样:
guard let startOfNextMonth = calendar.dateByAddingComponents(oneMonthComponent, toDate: startOfThisMonth, options: []) else {
return nil
}
其中 oneMonthComponent
只是一个月份值设置为 1 的 NSDateComponent。
当我读到它时,在文档中他们都说了类似的话:
Returns nil if date falls outside the defined range of the receiver or if the computation cannot be performed.
而且我一直在想,这到底是什么时候造成的。如果我只是在日期上加一个月,有没有办法可以为零?这是因为其他历法系统存在一些差异,添加一些单位没有意义吗?
我四处搜索,但一直无法找到它 return nil 的实例。
有没有什么可以使上面的代码为零?添加组件可能为零的示例是什么?
实际上,如果您只是在日期上加上一个月,您将不会得到 nil
个值。
不过,在某些退化的情况下,您可以获得 nil
值。例如,如果您使用的是伊斯兰历并添加 -9,999,999 年,您将得到 nil
(但奇怪的是,在其他日历中没有)。在这些极端情况下,其他日历通常会 overflow/wrap 年份(即使您希望它们 return nil
,根据您引用的文档)。
就我个人而言,我怀疑目前很少有情况会获得 nil
值。我尝试了各种极端值,伊斯兰历是我唯一成功获得 nil
值的日历。不过,这并不意味着 Apple 将来可能不会添加更强大的日期验证逻辑。我们可能必须从 Apple 那里获得建议(或查看 NSCalendar
的源代码)才能明确回答这个问题。
所以,最重要的是,我建议保留您的 guard
声明,但它不太可能在现实世界中失败。
我一直在使用 dateByAddingComponents:toDate:options:
和 dateByAddingUnit:value:toDate:options:
并使用可选绑定来获取日期。像这样:
guard let startOfNextMonth = calendar.dateByAddingComponents(oneMonthComponent, toDate: startOfThisMonth, options: []) else {
return nil
}
其中 oneMonthComponent
只是一个月份值设置为 1 的 NSDateComponent。
当我读到它时,在文档中他们都说了类似的话:
Returns nil if date falls outside the defined range of the receiver or if the computation cannot be performed.
而且我一直在想,这到底是什么时候造成的。如果我只是在日期上加一个月,有没有办法可以为零?这是因为其他历法系统存在一些差异,添加一些单位没有意义吗?
我四处搜索,但一直无法找到它 return nil 的实例。
有没有什么可以使上面的代码为零?添加组件可能为零的示例是什么?
实际上,如果您只是在日期上加上一个月,您将不会得到 nil
个值。
不过,在某些退化的情况下,您可以获得 nil
值。例如,如果您使用的是伊斯兰历并添加 -9,999,999 年,您将得到 nil
(但奇怪的是,在其他日历中没有)。在这些极端情况下,其他日历通常会 overflow/wrap 年份(即使您希望它们 return nil
,根据您引用的文档)。
就我个人而言,我怀疑目前很少有情况会获得 nil
值。我尝试了各种极端值,伊斯兰历是我唯一成功获得 nil
值的日历。不过,这并不意味着 Apple 将来可能不会添加更强大的日期验证逻辑。我们可能必须从 Apple 那里获得建议(或查看 NSCalendar
的源代码)才能明确回答这个问题。
所以,最重要的是,我建议保留您的 guard
声明,但它不太可能在现实世界中失败。