首页 > 解决方案 > c# 将 UTC 时间转换为 Central,包括 DateTime 对象中的时区

问题描述

我正在将 UTC 时间从我的本地服务器时间转换为中央标准时间。我在德国的服务器上运行这个。

转换时间和日期有效,但是当我将库转换为字符串时,它的时区偏移量错误。

当我需要它为2019-05-11T14:44:09-06: 00 时,它显示为2019-05-11T14:44:09+02: 00

TimeZoneInfo CRtimezone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, CRtimezone);

+02:00是德国的UTCoffset,我不想要,即使时间和日期在中部时间是正确的。

有没有办法在 DateTime 对象中传递或包含偏移量?

标签: c#datetimetimezoneutc

解决方案


有没有办法在 DateTime 对象中传递或包含偏移量?

不,DateTime结构没有UTC偏移但有DateTimeOffset。如果您真的想在代码中保留 UTC 偏移值,我建议您使用DateTimeOffset而不是DateTime.

由于它不保留 UTC 偏移值,因此当您获得它的文本(又名字符串)表示时,您仍然会获得德国服务器的偏移值(顺便包括、 和K说明z符)。方法返回一个实例,您可能想要表示的偏移值取决于您希望如何显示它。zzzzzTimeZoneInfo.ConvertTimeFromUtcDateTime

一种选择可能是您可能想要连接DateTime 和值的可排序(“s”)格式说明符表示。TimeZoneInfo.BaseUtcOffset

TimeZoneInfo CRtimezone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
$"{TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, CRtimezone).ToString("s")}{CRtimezone.BaseUtcOffset}".Dump();

推荐阅读