C#中无法将'04/28/2021 04:25p'转换为DateTime类型如何解决
问题原因及修复方案
你的代码存在两处格式匹配规则不匹配的问题:
- 你使用的
HH格式符对应24小时制的小时数值,而你拿到的时间串是12小时制的表述,12小时制的小时需要用小写hh格式符匹配 - 你使用的
tt格式符要求匹配完整的上午/下午标识(en-US文化下为AM/PM),但你拿到的日期字符串中仅包含标识首字母p,单首字母的标识只需要用单个t格式符匹配即可
修正后的代码如下:
var dateValue = DateTime.ParseExact( "04/28/2021 04:25p", "MM/dd/yyyy hh:mmt", new CultureInfo("en-US"));
如果第三方接口返回的首字母存在大小写不固定的情况,可以添加DateTimeStyles.IgnoreCase参数避免匹配失败:
var dateValue = DateTime.ParseExact( "04/28/2021 04:25p", "MM/dd/yyyy hh:mmt", new CultureInfo("en-US"), DateTimeStyles.IgnoreCase);
如果接口可能同时返回首字母缩写和完整的AM/PM标识,可以传入多格式数组兼容两种场景:
var allowedFormats = new string[] { "MM/dd/yyyy hh:mmt", "MM/dd/yyyy hh:mm tt" }; var dateValue = DateTime.ParseExact( "04/28/2021 04:25p", allowedFormats, new CultureInfo("en-US"), DateTimeStyles.None);
内容的提问来源于stack exchange,提问作者Sultan
相关产品推荐
相关产品推荐

