我应该以24小时时间格式在12 AM使用23:59:59或00:00:00吗?

当我搜索最大时间时。人们总是从VS调试器得到答案。这是23:59:59.9999999

因为我需要12 AM,24种格式。我想它将是00:00:00,但是... C#.NET假定以下条件:

var xx = DateTime.MaxValue.ToString("HH:mm:ss.fffffff");

在调试之前,它将打印 23:59:59.9999999

  

我应该使用什么?有关系吗?有什么区别?

     

应该使用 00:00:00 吗?或 23:59:59.9999999   在SQL Server中保存时间

大问题或我的意思是,当您通过 hh:mm:ss 将24种格式转换为12小时格式时,最终用户的行为不佳,它将显示11:59:59 PM 是不是很丑?应该是12:00:00 AM.

毕竟,黑曜石时代根据使用情况回答了这一问题。

zhang_ding345 回答:我应该以24小时时间格式在12 AM使用23:59:59或00:00:00吗?

这取决于视角:

var xx = DateTime.MaxValue.ToString("HH:mm:ss.fffffff");
var xy = DateTime.MinValue.ToString("HH:mm:ss.fffffff");

给予

  

23:59:59.9999999

     

00:00:00.0000000

所以,一个是一天的结束,另一个是一天的开始。

有一本有趣的小说叫《午夜之间的时间》

,

DateTime.MaxValue就是-DateTime可以表示的 maximum 值;也就是说,一天中的“最后”时刻。相反,.Date属性默认情况下使用00:00:00,因为它没有时间概念(除非指定)。

如果您有一个恰好在午夜发生的事件,我建议将其存储为00:00:00,因为该事件发生在午夜 ,并且您希望准确地表示出来。

最终,这实际上取决于您要使用的用例。您是否要声明该事件发生在第一天的晚上或第二天的开始?归根结底,尽管在大多数情况下,这样的划分没有什么区别。在这种情况下,您可能希望选择00:00:00的准确性和“易用性”。

,

以编程方式来说,您可以同时进行。它们之间(代码中)的唯一区别是:

 // using 00:00:00 will require you to add 1 day to the end date in order to count as full day
 if(time >= "2019-12-03 00:00:00" && time < "2019-12-04 00:00:00")

//using 23:59:59 will not require you to add 1 day to the end date.
 if(time >= "2019-12-03 00:00:00" && time <= "2019-12-03 23:59:59")

因此,基本上,如果您使用23:59:59,那么离网格还有一秒钟的时间,如果在这一秒中已存储了任何记录,则该记录将不包含在结果中。而第二个将包括它。

使用哪个? 00:00:00当然可以,如果您想更加精确,我在我的项目中没有看到任何结果差异,因为我在不同的项目中都使用了它们。但是我确定有些项目需要包含每微秒,因为此微秒可能会改变结果的曲线(例如分析或深度学习等)。

在SQL Server中,不要将时间另存为字符串,而是使用正确的数据类型(DateTime,TimeSpan ..etc)进行保存。当您从应用程序传递一个对应的时间数据类型时,SQL Server会很好地读取时间。

,

几件事:

  • C#中DateTime可以表示的最大值为9999-12-31 23:59:59.9999999。在SQL Server中,这对应于一个datetime2,具有相同的最大值。

  • SQL Server中的time类型的最大值也为23:59:59.9999999(尽管请注意,C#TimeSpan可以更大,因为它主要表示持续时间而不是时间)的一天)。

  • 如果您仅使用time类型存储时间范围,则一天结束时需要该23:59:59.9999999值。您可以使用DateTime.MaxValue.TimeOfDay在C#中快速获取。实际上,它将比真正的24:00小一刻。

  • 有7个9的小数,因为这是数据类型提供的精度。如果选择较低的精度,则给定值可能会落在该值上的可能性很小(但并非不可能)。因此,当您使用此技术时,请始终使9与数据类型的全精度对齐。 (不要只减去一秒或一毫秒。)

  • 在计算2020-01-01 00:002020-01-01 01:00之类的日期时间范围的差异时,只需将两个值相减即可得出结果(在这种情况下为1小时)。但是,在使用23:59:59.99999999时,必须解决丢失的滴答声。这可能会变得凌乱,因此使用00:00会有很大的优势。

  • 正如您所指出的,向最终用户显示23:59:59.9999999时,您可能必须编写自己的逻辑以将其格式化为24:00"end of day"等。

  • 比较日期时间范围时,您需要使用其他运算符进行结束比较:

    • 如果您使用23:59:59.9999999,请使用完全包含的范围比较:a <= now && b >= now
    • 如果您使用00:00,请使用半开范围比较-在开始处包括范围,在结束处包括范围:a <= now && b > now
  • 在比较仅时间范围(即timspan类型)时,采用相同的逻辑,但还必须考虑跨越午夜的时间范围:

    • 如果您使用23:59:59.9999999

      if (a < b)
          result = a <= now && b >= now;
      else
          result = a <= now || b >= now;
      
    • 如果您使用00:00

      if (a < b)
          result = a <= now && b > now;
      else
          result = a <= now || b > now;
      

总而言之,使用00:00值而不是23:59:59.9999999值通常更简单,因此您应该选择00:00。如果发现需要使用23:59:59.9999999,则应了解所需的编码更改。

本文链接:https://www.f2er.com/2989742.html

大家都在问