为什么ISO-8601时间转换不起作用?

时间:2014-07-24 16:32:38

标签: c#

我不清楚为什么程序无法转换时间。有人可以帮忙吗?我认为HH:MM:SS后跟Z是有效的ISO,但.net日期时间解析器报告它不是可接受的格式。

using System;
using System.Globalization;
using System.Text;

namespace DateTimePractice
{
    class Program
    {
        static void Main(string[] args)
        {
            // This string works with the extended info beyond just seconds
            //string dateString = "2008-06-11T16:11:20.0904778Z";
            // This appears to be a valid ISO-8601 time, but the parser fails
            string dateString = "2008-06-11T16:11:20Z";
            string finalResult;
            DateTime result;
            if (DateTime.TryParseExact(dateString, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out result))
                finalResult = string.Format("Converted '{0}' to {1} ({2}).", dateString, result, result.Kind);
            else
                finalResult = string.Format("'{0}' is not in an acceptable format.", dateString);
            Console.WriteLine(finalResult);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

@elgonzo在评论中写的是正确的。具有ISO 8601的ParseExact旨在以预期的格式精确解析,因此它将需要相应的小数秒。我会说链接文档中的部分说明如下:

  

请注意,如果使用与“O”或“o”格式说明符对应的自定义格式字符串调用解析方法,则不会得到与“O”或“o”相同的结果。这是因为使用自定义格式字符串的解析方法无法解析缺少时区组件的日期和时间值的字符串表示形式,或使用“Z”表示UTC。

在你的情况下,你可以用TryParse替换TryParseExact,并省略“o”格式说明符。无论小数秒部分如何,它都应该能够解析你的日期。