因此,在需要仅格式化给定DateComponentsFormatter
的纳秒的情况下,我正在使用TimeInterval
。问题在于它只是无法按预期工作,或者我在这里混淆了一些我不知道的东西。
这里有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")
。
预期:由于这会折叠“最大单位”(在这种情况下为几秒钟),因此应该类似于(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
是有效的,并且显然期望以纳秒为单位。
重要的是要注意,我使用了Try
Using con as SqlConnection = new SqlConnection(....constringhere...)
Conn.Open()
Dim sqlText = "insert into Quote values (@dat,@emp,@cusno); SELECT SCOPE_IDENTITY()"
cmd = New SqlCommand(sqlText,Conn)
cmd.Parameters.Add("@dat", SqlDbType.NVarChar).Value = dateOFCreat
cmd.Parameters.Add("@end", SqlDbType.NVarChar).Value = emp
cmd.Parameters.Add("@cusno", SqlDbType.NVarChar).Value = Customer_no
Dim lastID As Integer = cmd.ExecuteScalar()
TxtLastQuoteID.Text = lastID.ToString()
Conn.Close()
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
,它甚至报警,因为此行为在上面给出的输出中也不起作用(请参阅预期的行为{{ 3}})。
谢谢。
答案 0 :(得分:2)
DateComponentsFormatter
不支持纳秒。
请参阅allowedUnits
的文档,该文档不包含纳秒。它说:
允许的日历单位为:
year
month
weekOfMonth
day
hour
minute
second
将任何其他日历单位分配给此属性会导致异常。