You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何将带T和Z的ISO8601 DateTime转为仅含T的DateTime对象

DateTime对象格式澄清与解决方法

首先要明确一个关键事实:DateTime对象本身不存储任何字符串格式,它内部是用ticks(时间刻度)来表示一个具体的时间点,所谓的"带T的格式"、"斜杠分隔的格式"都只是调用ToString()时根据规则生成的字符串展示形式,不是对象本身的"值"。

你当前代码里的问题:

  • 用ToString("yyyy-MM-dd'T'HH:mm:ss.fff", CultureInfo.InvariantCulture)得到的带T的字符串,只是原DateTime对象的一种格式化输出;
  • 用Convert.ToDateTime转回的val对象,和原dt的时间值完全一致,只是默认调用ToString()时使用了当前系统文化的格式,所以看起来是15/11/2023 03:30:30,但它的时间本质还是2023-11-15 03:30:30.444 UTC。

如果你需要的是以yyyy-MM-dd'T'HH:mm:ss.fff格式展示时间,不需要修改DateTime对象本身,只需要在需要输出/使用的时候,用指定格式调用ToString()即可。如果想简化重复调用,可以写一个扩展方法:

using System.Globalization;

public static class DateTimeExtensions
{
    // 扩展方法:返回不带Z的ISO8601格式字符串
    public static string ToIso8601WithoutZ(this DateTime dateTime)
    {
        return dateTime.ToString("yyyy-MM-dd'T'HH:mm:ss.fff", CultureInfo.InvariantCulture);
    }
}

使用示例:

DateTime dt = new DateTime(2023, 11, 15, 03, 30, 30, 444, DateTimeKind.Utc);
string formattedTime = dt.ToIso8601WithoutZ();
// formattedTime的值就是"2023-11-15T03:30:30.444"

如果你的场景是需要将这个格式的字符串传递给其他系统,直接传递formattedTime即可;如果只是需要在本地展示或日志输出,直接调用该扩展方法就能得到你想要的格式。

内容的提问来源于stack exchange,提问作者KrishBruteForce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 12:22:58