如何设置DateTimeOffset.ToString("o")偏移为00并修改毫秒为.00
解决DateTimeOffset格式调整的两个需求
没问题,针对你提到的两个DateTimeOffset格式调整需求,我来给你拆解实现方案:
一、将毫秒部分固定为.00并保留原时区偏移
你需要把原格式中类似.2670639的毫秒部分改成.00,同时保留原有的时区偏移(比如-06:00)。这里有两种可靠的实现方式:
方式1:直接使用自定义格式字符串
通过指定自定义格式,强制把毫秒部分显示为.00,无需修改原始DateTimeOffset的值:
DateTimeOffset now = DateTimeOffset.Now; // 示例值:{2/22/2018 10:32:50 AM -06:00} string xmlFormatTime = now.ToString("yyyy-MM-ddTHH:mm:ss.00zzz"); // 输出结果:"2018-02-22T10:32:50.00-06:00"
格式说明:
yyyy-MM-dd:日期部分(年-月-日)THH:mm:ss:时间部分(T分隔符+时:分:秒).00:固定显示两位毫秒为00zzz:带符号的时区偏移(比如-06:00)
方式2:先重置毫秒值再格式化
如果你希望不仅是格式显示,而是实际把DateTimeOffset的毫秒值设为0,再进行格式化:
DateTimeOffset now = DateTimeOffset.Now; // 减去当前毫秒值,将毫秒重置为0 DateTimeOffset nowWithZeroMs = now.AddMilliseconds(-now.Millisecond); // 使用ff格式符显示两位毫秒(此时为00) string xmlFormatTime = nowWithZeroMs.ToString("yyyy-MM-ddTHH:mm:ss.ffzzz"); // 输出结果:"2018-02-22T10:32:50.00-06:00"
二、将ToString("o")的偏移设为+00:00
ToString("o")是.NET中ISO 8601的"往返格式",要让时区偏移变为+00:00,本质就是将时间转换为UTC时间,再调用该方法:
基础实现
直接转换为UTC后使用ToString("o"):
DateTimeOffset now = DateTimeOffset.Now; // 转换为UTC时间后调用ToString("o") string utcRoundTripTime = now.Utc.ToString("o"); // 输出结果类似:"2018-02-22T16:32:50.2670639+00:00"
说明:UTC时间的时区偏移默认就是+00:00,完美符合需求。
结合毫秒为00的进阶实现
如果需要同时满足毫秒为.00和偏移为+00:00,可以结合上面两种方法:
DateTimeOffset now = DateTimeOffset.Now; // 重置毫秒为0后转换为UTC DateTimeOffset nowWithZeroMsUtc = now.AddMilliseconds(-now.Millisecond).Utc; // 使用自定义格式输出 string formattedTime = nowWithZeroMsUtc.ToString("yyyy-MM-ddTHH:mm:ss.00zzz"); // 输出结果:"2018-02-22T16:32:50.00+00:00"
内容的提问来源于stack exchange,提问作者Mohamed Sahir
相关产品推荐
相关产品推荐

