【问题标题】:Verify if a value is a tick in c#验证一个值是否是c#中的勾号
【发布时间】:2015-04-29 02:56:19
【问题描述】:

我有一个使用 C# 创建并存储在数据库列中的时间刻度 (635655080937662522)。我怎样才能验证这个值是一个勾号而不是别的什么?刻度有特定格式吗?

【问题讨论】:

  • 滴答计数只是一个数字,所以从 0 到 long.MaxValue 的任何值都是可以接受的。
  • 您唯一能做的就是将其转换回 DateTime 并查看其是否在合理范围内。
  • 我想“无效的刻度”可以追溯到 2410 年,例如?如果是这样,您可以根据刻度创建DateTime 并检查它是否在合理的日期范围内。但是,您应该问自己“为什么它会是一个无效的数字,我能做些什么来防止这种情况发生?”

标签: c# .net date time


【解决方案1】:

正如其他人所说,刻度只是一个数字,但有一些重要的区别,取决于刻度的来源。

  • 来自DateTimeDateTimeOffset 的刻度每个为100ns,范围从DateTime.MinValue.TicksDateTime.MaxValue.Ticks,即03155378975999999999。请注意,这比Int64.MaxValue 小得多。

  • 来自TimeSpan 的每个刻度也是 100ns,但范围从 TimeSpan.MinValue.TicksTimeSpan.MaxValue.Ticks,与 Int64 的范围相同,即 -92233720368547758089223372036854775807

  • 来自Stopwatch(在System.Diagnostics 命名空间中)的记号大小不同,具体取决于系统的硬件功能。在现代硬件上,它们通常约为 4ns。您可以通过使用Stopwatch.Elapsed.Ticks 而不是Stopwatch.ElaspedTicks 或在计算中考虑Stopwatch.Frequency 将它们调整为TimeSpan 刻度。范围是0Int64.MaxValue

【讨论】:

    【解决方案2】:

    Tick 是一个数字,你真的没有更多的验证可以做。

    您可以检查实际时间是否在对您的情况有意义的特定范围内,但它是特定于应用程序的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2018-03-11
      • 2015-09-23
      相关资源
      最近更新 更多