DateTime.ParseExact方法出现意外错误,求问题排查与解决
问题根源分析
咱们来拆解下你遇到的问题:
你的代码里,第一步用System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt")生成日期字符串,但这里的tt格式符会根据当前系统的区域设置生成对应的上午/下午标识——比如如果你的系统是中文环境,生成的会是「上午」或「下午」,而不是英文的「AM/PM」。
但后面你用DateTime.ParseExact解析时,指定的是CultureInfo.InvariantCulture,这个文化的tt对应的是英文的「AM/PM」。当解析器看到非英文的上午/下午标识时,自然就会抛出格式不匹配的错误。
而你的系统日期格式设置为3/29/2018(即MM/dd/yyyy),其实和这段代码的直接报错无关,但它侧面说明你的系统区域设置不是英文系的,这才是导致tt格式符生成非英文标识的核心原因。
快速修复方案
你只需要在生成日期字符串的时候,也指定CultureInfo.InvariantCulture,让生成的tt是英文的「AM/PM」,这样解析时就能匹配上了:
string DateString = System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture); string Format = "dd/MM/yyyy hh:mm:ss tt"; DateTime DT = DateTime.ParseExact(DateString, Format, CultureInfo.InvariantCulture); string DTE = DT.ToString("dd/MM/yyyy");
或者,如果你不需要中间的字符串转换步骤,完全可以直接获取日期部分,效率更高:
string DTE = System.DateTime.Now.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
内容的提问来源于stack exchange,提问作者Zaigham Ali
相关产品推荐
相关产品推荐

