如何根据 C# 中的时区偏移获取日期时间?

How to get datetime based on timezone offset in c#?

在 C# 中,我这样做

DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss")

但它让我得到了服务器时间。但是我也有这种格式的偏移量,例如 "-04:00"。如何结合偏移量得到当地时间?

谢谢

这应该有效

DateTime.UtcNow.AddHours(DateTimeOffset.Parse("01/01/0001 00:00:00 -04:00").Offset.TotalHours).ToString("yyyy-dd-M--HH-mm-ss",CultureInfo. InvariantCulture);

需要添加指令

using System.Globalization;

这有效。

DateTime.UtcNow.AddHours(DateTimeOffset.Parse("01/01/0001 00:00:00 -04:00").Offset.TotalHours).ToString("yyyy-dd-M--HH-mm-ss")

如果你的意思是你想得到服务器的系统本地时间包括偏移量,那么使用DateTimeOffset.Now 属性。然后根据需要格式化。

DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss zzz")

The zzz specifier 将偏移量生成为您要求的 ISO 8601 扩展格式的字符串。

如果你的意思是你有一个来自其他地方的 UTC 偏移量,并且你想将它应用到服务器的当前 UTC 时间,那么请改为执行以下操作:

TimeSpan offset = TimeSpan.Parse("-04:00");
DateTimeOffset now = DateTimeOffset.UtcNow.ToOffset(offset);
string result = now.ToString("yyyy-MM-dd HH:mm:ss zzz");

这需要当前服务器时间,并应用 ToOffset 函数来调整您提供的偏移量。

请记住,偏移量与时区不同。您的偏移量 可能 是当前日期和时间的偏移量,或者它可能是该时区中的其他日期和时间的偏移量。例如,美国东部时间在夏令时期间为 UTC-4,但在标准时间期间为 UTC-5。请参阅 the timezone tag wiki 中的“时区 != 偏移量”。