如果您所在的时区午夜并不总是有效,您可以执行以下操作(如果 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
Run Code Online (Sandbox Code Playgroud)
如果您在巴西这样的地方,夏令时转换发生在当地时间午夜,那么这就存在潜在的问题。请注意,以上内容均假设您要使用系统本地时区。
使用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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
269 次 |
| 最近记录: |