代码之家  ›  专栏  ›  技术社区  ›  Jon Schneider Stefan

调用DateTime。带整数的AddDays总是保持时间不变吗?

  •  8
  • Jon Schneider Stefan  · 技术社区  · 8 年前

    考虑以下代码,该代码试图获取 DateTime 这相当于当地时间“昨天午夜”:

    DateTime midnightYesterday = DateTime.Today.AddDays(-1.0d);
    

    这个会吗 总是 结果是 日期时间 时间成分为00:00:00——不管任何转角情况,例如闰日、闰秒或本地时区是什么?

    更一般地说:打电话吗 DateTime.AddDays 日期时间 返回的时间分量与原始时间分量完全相同 Datetime ?

    这个 MSDN documentation for DateTime.AddDays 没有解决这个具体问题。

    1 回复  |  直到 8 年前
        1
  •  8
  •   Evk    8 年前
    1. DateTime 不考虑闰秒。你可以看这个 article 从中可以看出,正因为如此,它并不真正支持UTC。文件表明:

    时间值是以100纳秒为单位测量的,称为滴答声 特定日期是自1月12:00午夜以来的滴答数 公历中的公元10011年(C.E.)(不包括记号) 这将通过闰秒增加)

    当地时间,或在一个时区和另一个时区之间)采用夏令时 考虑到时间, 但算术运算和比较运算则不然。

    这意味着将天(即算术运算)添加到 日期时间 例如,即使它有 Local (so表示本地时区中的时间)不考虑夏令时。这使得在datetime上执行任何算术运算都需要 地方的 真是个坏主意。如果您需要对日期时间执行此操作-首先将其转换为UTC(没有DST的概念),执行操作,然后转换回本地(如上所述的转换 考虑DST)。

    您还可以查看源代码,了解datetime值在内部存储为一个数字(滴答数),添加天数只会为该数字添加固定值。计算小时\分钟\秒使用该值并执行固定运算(仅除法)以获得目标值。这些操作中没有一个像闰秒、时区或其他任何操作。所以你的问题的答案是肯定的。