我正在浏览Scott Hanselman的Developer Interview问题列表,并遇到了这个问题:
DateTime.Parse(myString)有什么问题?
虽然我知道在解析一串未知格式或原点时存在固有的风险,还有其他原因吗?是否使用DateTime.ParseExact代替?它应该是myString.ToString()吗?
此外,语言环境问题,DateTime.Parse()
也可能抛出一个你必须捕获的异常.使用DateTime.TryParse()
或DateTime.TryParseExact()
代替.
在系统上使用当前的线程文化通常是一个坏主意,"尝试各种格式,看看它们是否有效."
具有特定文化的ParseExact是一种更加可控和精确的方法.(即使你指定了当前的文化,它也会让读者更清楚地知道这是怎么回事.)
正如MSDN所说:
由于Parse(String)方法尝试使用当前区域性的格式规则解析日期和时间的字符串表示形式,因此尝试解析跨不同文化的特定字符串可能会失败或返回不同的结果.如果将跨不同的语言环境解析特定的日期和时间格式,请使用DateTime.Parse(String,IFormatProvider)方法或ParseExact方法的重载之一,并提供格式说明符.