gpt4 book ai didi

c# - 从 DateTime (utc) 和 TimeZoneInfo 获取 DateTimeOffset

转载 作者:可可西里 更新时间:2023-11-01 07:42:53 27 4
gpt4 key购买 nike

我需要将 DateTime+TimeZoneInfo 转换为 DateTimeOffset。

我该怎么做?我假设我必须通过 TimeSpan 但我不确定是否会正确处理夏令时..

谢谢!

更新

TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time");
return new DateTimeOffset(DateTime.UtcNow, timeZone.BaseUtcOffset);

这段代码抛出异常..

The UTC Offset for Utc DateTime instances must be 0.\r\nParameter name: offset

更新 2

抱歉,我没有意识到 DateTimeOffset 只包含偏移量,它不包含实际的区域信息 - 所以我接受@Dave 的回答,因为我将使用它..

最佳答案

您应该即将了解 DateTime.UtcNow 和 DateTime.Now 之间的区别

var now = DateTime.Now;
var utcNow = now.ToUniversalTime();
var ts = utcNow - now;

如果您要保存偏移量,通常以 UTC 格式保存所有日期(尤其是在数据库中)是有益的,这样您就不必处理偏移量。您只需在显示之前转换它们,但所有计算都以 UTC 进行。

编辑:如果您有一个 TimeZone 对象,您可以将 UTC 日期转换为该时区的本地时间。

TimeZone.CurrentTimeZone.ToLocalTime()

DateTime dt = TimeZoneInfo.ConvertTimeFromUtc()

下面是一些示例代码,将列出所有时区的日期。

var dt = new DateTime(2011, 5, 21, 11, 0, 0);
foreach (var tzi in TimeZoneInfo.GetSystemTimeZones())
{
Console.WriteLine(string.Format("Time in {0} is {1}", tzi.DisplayName, TimeZoneInfo.ConvertTimeFromUtc(dt, tzi)));
}

关于c# - 从 DateTime (utc) 和 TimeZoneInfo 获取 DateTimeOffset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6284124/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com