如何确定两个时间之间的小时数。例如:
旧金山时间下午3:30和迪拜时间晚上7:30
我不清楚的部分是,是否有一种通用的计算减去时间跨度的方法,考虑到时区和国家。
我使用C#作为主要语言。任何帮助都将不胜感激。
提前致谢。
您询问的是:
"旧金山下午3:30和迪拜晚上7:30"
如果您只知道时间和地点,则存在问题,因为并非所有时区都是固定实体。迪拜固定在UTC+4,但旧金山在太平洋标准时间为UTC-8,在太平洋夏令时为UTC-7。因此,还需要一个日期来进行转换。
以下内容将使用第一个时区的当前日期来计算差异:
TimeZoneInfo tz1 = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
TimeZoneInfo tz2 = TimeZoneInfo.FindSystemTimeZoneById("Arabian Standard Time");
DateTime today = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tz1).Date;
DateTime dt1 = new DateTime(today.Year, today.Month, today.Day, 15, 30, 0); // 3:30 PM
DateTime dt2 = new DateTime(today.Year, today.Month, today.Day, 19, 30, 0); // 7:30 PM
TimeSpan elapsed = TimeZoneInfo.ConvertTimeToUtc(dt1, tz1) -
TimeZoneInfo.ConvertTimeToUtc(dt2, tz2);
"Pacific Standard Time"
是美国太平洋时间的Windows时区标识符,尽管名称如此,但涵盖了PST和PDT。)
源时区的“当前”日期可能与目标时区当前日期不同。如果没有额外的输入,你无法做太多事情。你需要知道每个值所涉及的日期。
如果您使用DateTimeOffset
类型,可以避免使用本地时间时的一些陷阱,因为它可以表示任何时区的本地时间:
var dateTimeOffsetSanFrancisco = DateTimeOffset.Parse("9/8/2014 3:30PM -0700");
var dateTimeOffsetDubai = DateTimeOffset.Parse("9/8/2014 7:30PM +0400");
var elapsedHours = (dateTimeOffsetDubai - dateTimeOffsetSanFrancisco).TotalHours;
var utcSanFran = sfLocal.ToUniversalTime();
var utcDubai = dubaiLocal.ToUniversalTime();
var elapsed = dubaiLocal - sfLocal;
假设迪拜>旧金山。
要获取经过的总小时数,请使用:
elapsed.TotalHours;
ToUniversalTime
时,它只能从运行它的机器的本地时区进行转换。由于一台计算机不能同时处于旧金山和迪拜,所以无论在哪里运行,此代码都不起作用。 - Matt Johnson-Pint