每月营业时间,夏令时

时间:2012-10-12 13:39:42

标签: vb.net date dst

是否有内置函数来计算一个月内的小时数? 它需要它照顾日光(增加或减少一小时)。

1 个答案:

答案 0 :(得分: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值,然后转换为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;