DateComponentsFormatter 和 .nanosecond
DateComponentsFormatter and .nanosecond
因此,我在只需要格式化给定 TimeInterval
的纳秒的情况下使用 DateComponentsFormatter
。问题是它没有按预期工作,或者我在这里混淆了一些我不知道的东西。
这里有 3 个快速测试来说明我在说什么。
第一个场景
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.second, .nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.collapsesLargestUnit = true
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.42424242424242424242424242424242))
输出:Optional("42 seconds")
.
预期:因为这会折叠 "largest unit"(在本例中为秒),所以预计会像 (Optional("42.42424242424242424242424242424242 * 1e^9"))
.
第二个场景
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.second, .nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.42))
输出:Optional("42 seconds")
.
预期:即使没有选择不折叠 .second
,我也希望接近 (Optional("42 seconds 0.42 * 1e^9 nanoseconds"))
.
第三种情况
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.424242))
输出:nil
.
预期:现在它甚至不会将 TimeInterval
识别为有效 - 当它被定义为可能的最小分数时 - 并且显然预期一切都以纳秒为单位。
重要的是要注意我使用了 allowsFractionalUnits = true
,这更 令人担忧 ,因为这种行为在上面给出的输出中也不起作用(参见预期的行为 here).
提前致谢。
DateComponentsFormatter
不支持纳秒。
请参阅 allowedUnits
的文档,其中不包括纳秒。它说:
The allowed calendar units are:
year
month
weekOfMonth
day
hour
minute
second
Assigning any other calendar units to this property results in an exception.
因此,我在只需要格式化给定 TimeInterval
的纳秒的情况下使用 DateComponentsFormatter
。问题是它没有按预期工作,或者我在这里混淆了一些我不知道的东西。
这里有 3 个快速测试来说明我在说什么。
第一个场景
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.second, .nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.collapsesLargestUnit = true
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.42424242424242424242424242424242))
输出:Optional("42 seconds")
.
预期:因为这会折叠 "largest unit"(在本例中为秒),所以预计会像 (Optional("42.42424242424242424242424242424242 * 1e^9"))
.
第二个场景
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.second, .nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.42))
输出:Optional("42 seconds")
.
预期:即使没有选择不折叠 .second
,我也希望接近 (Optional("42 seconds 0.42 * 1e^9 nanoseconds"))
.
第三种情况
let fooFormatter = DateComponentsFormatter()
fooFormatter.allowedUnits = [.nanosecond]
fooFormatter.unitsStyle = .full
fooFormatter.allowsFractionalUnits = true
print(fooFormatter.string(from: 42.424242))
输出:nil
.
预期:现在它甚至不会将 TimeInterval
识别为有效 - 当它被定义为可能的最小分数时 - 并且显然预期一切都以纳秒为单位。
重要的是要注意我使用了 allowsFractionalUnits = true
,这更 令人担忧 ,因为这种行为在上面给出的输出中也不起作用(参见预期的行为 here).
提前致谢。
DateComponentsFormatter
不支持纳秒。
请参阅 allowedUnits
的文档,其中不包括纳秒。它说:
The allowed calendar units are:
year
month
weekOfMonth
day
hour
minute
second
Assigning any other calendar units to this property results in an exception.