【问题标题】:Hours in month, with daylight savings每月小时数,夏令时
【发布时间】:2012-10-03 08:15:52
【问题描述】:

是否有内置函数来计算一个月的小时数? 它需要处理夏令时(增加或减少一个小时)。

【问题讨论】:

    标签: vb.net date dst


    【解决方案1】:

    如果您不在午夜并不总是有效的时区,您可以执行以下操作(如果 VB 语法稍有偏差,请致歉):

    Dim start = New DateTime(year, month, day, 0, 0, 0, DateTimeKind.Local)
    Dim end = start.AddMonths(1)
    Dim length = end.ToUniversalTime() - start.ToUniversalTime()
    Dim hours = length.TotalHours
    

    如果您在巴西这样的地方,即在当地时间午夜进行 DST 转换,则可能会出现问题。请注意,以上都是假设您想要使用系统本地时区。

    使用Noda Time,您可以创建适当的LocalDate 值,然后转换为ZonedDateTime at the start of the relevant day,并以这种方式计算出差异,没有任何歧义。 C# 示例:

    var zone = ... // Whatever DateTimeZone you want...
    var start = new LocalDate(year, month, day);
    var end = start.PlusMonths(1);
    var startInstant = zone.AtStartOfDay(start).ToInstant();
    var endInstant = zone.AtStartOfDay(end).ToInstant();
    var duration = endInstant - startInstant;
    var hours = duration.Ticks / NodaConstants.TicksPerHour;
    

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 2014-04-04
      • 1970-01-01
      • 2015-07-16
      • 2018-10-01
      • 2015-03-10
      • 2014-12-24
      • 2019-05-26
      • 2012-06-20
      相关资源
      最近更新 更多