C#如何将DateTime转换为指定时区并输出带偏移的指定格式
问题根源
DateTime类型本身没有和所属时区的偏移量绑定,使用zzz格式符格式化时,会默认读取当前运行设备的系统时区偏移,和你转换后的时间值所属时区无关,这就是你在不同时区设备上输出偏移不一致的原因。
解决方案
使用内置的DateTimeOffset类型实现,它可以将时间值和对应时区偏移绑定,格式化时无需依赖运行设备的时区设置,无需自行编写偏移拼接逻辑:
// 1. 定义原始UTC时间,和你的原有逻辑一致 DateTime todayCloseLineUtc = DateTime.SpecifyKind(Convert.ToDateTime("25-May-2021 18:36"), DateTimeKind.Utc); // 2. 获取目标时区实例 TimeZoneInfo targetZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); // 3. 计算该UTC时间对应的目标时区偏移量 TimeSpan targetOffset = targetZone.GetUtcOffset(todayCloseLineUtc); // 4. 构造绑定了目标时区偏移的DateTimeOffset对象 DateTimeOffset targetDtOffset = new DateTimeOffset(todayCloseLineUtc).ToOffset(targetOffset); // 5. 直接格式化输出 string output = targetDtOffset.ToString("yyyy-MM-dd'T'HH:mm:ss.fffffffzzz");
输出效果
无论运行设备的系统时区是IST、伦敦时区还是其他任意时区,输出结果固定为:2021-05-25T19:36:00.0000000+01:00,完全匹配要求。
内容的提问来源于stack exchange,提问作者samar
相关产品推荐
相关产品推荐

