2012-10-12 23 views

回答

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值,然後轉換爲ZonedDateTimeat 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;