4

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

4

1 回答 1

3

如果您不在午夜并不总是有效的时区,您可以执行以下操作(如果 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转换为 a ,并以这种方式计算出差异,没有任何歧义。C# 示例:ZonedDateTime

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;
于 2012-10-12T13:45:33.750 回答