将DateTime转换为特定格式

时间:2015-04-23 08:16:50

标签: c# datetime windows-phone-8.1 windows-rt

将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为字符串

3 个答案:

答案 0 :(得分:7)

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

parsedDate.ToString("O")

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

返回"2015-03-26T18:02:58.1457980Z"

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

答案 1 :(得分:4)

答案几乎是@Dirk所说的:

parsedDate.ToString("O")但是,你必须将DateTime转换为UTC:这就是你如何得到" Z"最后。

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

修改

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

答案 2 :(得分:0)

我所知道的最快的方法是:

        ///<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 );
    }