DateComponentsFormatter和.nanosecond

时间:2019-02-15 13:12:15

标签: swift time nsdateformatter nsdatecomponents nsdatecomponentsformatter

因此,在需要仅格式化给定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}})。

谢谢。

1 个答案:

答案 0 :(得分:2)

DateComponentsFormatter不支持纳秒。

请参阅allowedUnits的文档,该文档不包含纳秒。它说:

  

允许的日历单位为:

     
      
  • year
  •   
  • month
  •   
  • weekOfMonth
  •   
  • day
  •   
  • hour
  •   
  • minute
  •   
  • second
  •   
     

将任何其他日历单位分配给此属性会导致异常。