DateTime.TryParseExact运行却返回false,不同Windows机器结果不一致咨询
问题原因及解决方法
你的代码存在一处关键逻辑错误,这也是跨机器结果不一致的根源:
string dateAndTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm"); // 错误:把格式化后的时间字符串当成格式规则传入ToString方法 string bst = DateTime.Now.ToString(dateAndTime);
DateTime.ToString(string format)的参数要求是格式说明符(比如"dd/MM/yyyy HH:mm"),但你传入的dateAndTime是已经生成的时间字符串(类似"15/10/2024 14:30")。.NET会尝试把这个时间字符串当作格式规则来解析当前时间,最终生成的bst内容完全不符合你预期的格式。
不同机器返回结果不同的核心原因:
- 两台Windows机器的区域文化设置存在差异,解析这个错误的“格式字符串”时,生成的
bst内容不一样。有的机器碰巧生成了符合"dd/MM/yyyy HH:mm"格式的字符串,所以TryParseExact返回true;你的机器生成的字符串不匹配该格式,因此返回false。
修正后的代码
如果你的需求是验证格式化后的时间能否被正确解析,直接使用dateAndTime作为待解析字符串即可,无需多余的ToString调用:
string dateAndTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture); DateTime dateTime; var check = DateTime.TryParseExact(dateAndTime, "dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime);
额外提示:调用ToString时指定CultureInfo.InvariantCulture,可以避免不同区域的日期分隔符差异(比如部分区域用"-"替代"/")导致格式化结果偏离预期。
内容的提问来源于stack exchange,提问作者CodingSoft007
相关产品推荐
相关产品推荐

