将 DateTime 转换为特定格式

Convert DateTime to a specific format

将 DateTime 转换为这种格式的最佳和最快的方法是什么?

2015-03-26T18:02:58.145798Z

目前我从服务器收到一个日期,我能够解析它并将日期转换为 DateTime,ToString() 输出如下所示:

26/03/2015 18:02:58

为了转换日期,我使用了这行代码:

var parsedDate = DateTime.Parse("2015-03-26T18:02:58.145798Z", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);

将 parsedDate 转换回原始格式的最佳方法是什么?

编辑:我想将 DateTime 转换为这种格式 2015-03-26T18:02:58.145798Z as string

如果您有一个 DateTime 对象,您可以使用 O 作为格式说明符将其转换为具有该特定格式的字符串:

parsedDate.ToString("O")

parsedDate.ToUniversalTime().ToString("O") // if parsedDate is not UTC

returns "2015-03-26T18:02:58.1457980Z".


如果 DateTime 对象的 DateTimeKind 不是 Utc,那么根据 ISO8601,您将不会在字符串末尾获得 Z 扩展名。在您提供的示例中,存在 Z,因为 DateTime.Parse 会识别它,而 return 是 Utc 中的 DateTime。如果 Z 在您解析的原始字符串中丢失,您仍然可以通过在日期时间对象上使用 ToUniversalTime() 来假设它是 UTC。

答案和@Dirk说的差不多:

parsedDate.ToString("O") 是行,但是 您必须将 DateTime 转换为 UTC:这就是最后获得 "Z" 的方式。

有关详细信息,请参阅 https://msdn.microsoft.com/en-us/library/az4se3k1%28v=vs.110%29.aspx

编辑:

要将 DateTime 转换为 UTC,请使用 ToUniversalTime() 方法。

据我所知,最快的方法是:

        ///<summary>Format the date time value as a parsable ISO format: "2008-01-11T16:07:12Z".</summary>
    public static string ISO( this DateTime dt ) {
        var ca = new char[] {
            (char) ( dt.Year / 1000 % 10 + '0' ),
            (char) ( dt.Year / 100 % 10 + '0' ),
            (char) ( dt.Year / 10 % 10 + '0' ),
            (char) ( dt.Year % 10 + '0' ),
            '-',
            (char) ( dt.Month / 10 + '0' ),
            (char) ( dt.Month % 10 + '0' ),
            '-',
            (char) ( dt.Day / 10 + '0' ),
            (char) ( dt.Day % 10 + '0' ),
            'T',
            (char) ( dt.Hour / 10 + '0' ),
            (char) ( dt.Hour % 10 + '0' ),
            ':',
            (char) ( dt.Minute / 10 + '0' ),
            (char) ( dt.Minute % 10 + '0' ),
            ':',
            (char) ( dt.Second / 10 + '0' ),
            (char) ( dt.Second % 10 + '0' ),
            'Z',
        };
        return new string( ca );
    }