如何获取.NET C#中DateTimeOffset的本地日期时间?
解决DateTimeOffset转换为目标本地时间的问题
你的代码创建的是一个UTC+5时区的时间点:
var date = new DateTimeOffset(2023, 07, 21, 23, 00, 00, TimeSpan.FromHours(5));
你期望的2023/07/22 04:00 AM是UTC+9时区的时间(原UTC+5的21日23点,加上4小时时差即得到该结果)。要实现这个转换,核心是将DateTimeOffset转换到目标时区后再格式化输出,具体方案如下:
方案1:显式转换到指定时区(推荐)
这种方式不依赖系统本地时区,更稳定:
var date = new DateTimeOffset(2023, 07, 21, 23, 00, 00, TimeSpan.FromHours(5)); // 定义目标时区(UTC+9) var targetTimeZone = TimeZoneInfo.CreateCustomTimeZone("UTC+9", TimeSpan.FromHours(9), "UTC+9", "UTC+9"); // 将时间转换到目标时区 var targetDateTime = date.ConvertTime(targetTimeZone); // 按期望格式输出 string formattedResult = targetDateTime.ToString("yyyy/MM/dd hh:mm tt", CultureInfo.InvariantCulture); // 输出结果:2023/07/22 04:00 AM
方案2:转换到系统本地时区(仅当本地时区为UTC+9时适用)
如果你的运行环境系统时区正好是UTC+9,可以直接用ConvertTimeToLocalTime():
var date = new DateTimeOffset(2023, 07, 21, 23, 00, 00, TimeSpan.FromHours(5)); var localDateTime = date.ConvertTimeToLocalTime(); string formattedResult = localDateTime.ToString("yyyy/MM/dd hh:mm tt", CultureInfo.InvariantCulture);
注意事项
你之前得到UTC时间21/07/2023 18:00 +00:00,是因为直接调用了date.UtcDateTime或使用了默认的UTC格式化逻辑,没有执行时区转换步骤。
内容的提问来源于stack exchange,提问作者L Pardo Cardona
相关产品推荐
相关产品推荐

