UTC 到夏令时的偏移量不正确
Offset for UTC to Daylight Savings Time incorrect
我正在尝试将时间设置为 EST,然后查找 UCT 时间。 (我们有我们的理由)。我读到 "Eastern Standard Time" 应该考虑夏令时。但是当我们检查日期时,我们知道它属于夏令时,它仍然会尝试转换 5 小时而不是 4 小时。我是否缺少任何方法?或者我们必须做一些操作。
DateTimeOffset convertDateTime = new DateTimeOffset(
subbmission.EntryDate,
TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time").BaseUtcOffset);
我添加了以下但老板不喜欢使用它..所以任何想法将不胜感激。
if (zone.IsDaylightSavingTime(convertDateTime.DateTime))
{
currentDateTime = convertDateTime.DateTime.AddHours(-1);
}
else
{
currentDateTime = convertDateTime.DateTime;
}
从根本上说,您使用了错误的方法 - 如果您想转换为 UTC,请使用 TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo)
。您需要注意无效(因为它们被跳过)或模棱两可(因为时钟倒退,并且同一当地时间出现了两次)的时间。
如果您真的想要 DateTimeOffset
以便同时获得本地时间和 UTC 时间,您可以使用 call ConvertTimeToUtc
然后计算它们之间的差异。很遗憾 TimeZoneInfo
似乎没有 "construct a DateTimeOffset
based on this DateTime
in this time zone" 但我看不到它...
作为替代方案,您可以使用我的 Noda Time 项目,这当然使所有这些都更加清晰:)
为了获得时区日期的正确偏移量(有或没有夏令时),我使用类似
的东西
DateTimeOffset utcOffset = new DateTimeOffset(subbmission.EntryDate.ToUniversalTime(), TimeSpan.Zero);
var zone TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var correctOffset = zone.GetUtcOffset(utcOffset);
我正在尝试将时间设置为 EST,然后查找 UCT 时间。 (我们有我们的理由)。我读到 "Eastern Standard Time" 应该考虑夏令时。但是当我们检查日期时,我们知道它属于夏令时,它仍然会尝试转换 5 小时而不是 4 小时。我是否缺少任何方法?或者我们必须做一些操作。
DateTimeOffset convertDateTime = new DateTimeOffset(
subbmission.EntryDate,
TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time").BaseUtcOffset);
我添加了以下但老板不喜欢使用它..所以任何想法将不胜感激。
if (zone.IsDaylightSavingTime(convertDateTime.DateTime))
{
currentDateTime = convertDateTime.DateTime.AddHours(-1);
}
else
{
currentDateTime = convertDateTime.DateTime;
}
从根本上说,您使用了错误的方法 - 如果您想转换为 UTC,请使用 TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo)
。您需要注意无效(因为它们被跳过)或模棱两可(因为时钟倒退,并且同一当地时间出现了两次)的时间。
如果您真的想要 DateTimeOffset
以便同时获得本地时间和 UTC 时间,您可以使用 call ConvertTimeToUtc
然后计算它们之间的差异。很遗憾 TimeZoneInfo
似乎没有 "construct a DateTimeOffset
based on this DateTime
in this time zone" 但我看不到它...
作为替代方案,您可以使用我的 Noda Time 项目,这当然使所有这些都更加清晰:)
为了获得时区日期的正确偏移量(有或没有夏令时),我使用类似
的东西DateTimeOffset utcOffset = new DateTimeOffset(subbmission.EntryDate.ToUniversalTime(), TimeSpan.Zero);
var zone TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var correctOffset = zone.GetUtcOffset(utcOffset);