字符串“04/28/2021 04:25p”未被识别为有效的日期时间
Posted
技术标签:
【中文标题】字符串“04/28/2021 04:25p”未被识别为有效的日期时间【英文标题】:String '04/28/2021 04:25p' was not recognized as a valid DateTime 【发布时间】:2022-01-11 17:14:17 【问题描述】:我从第三方 API 获取数据。我收到了这样的日期字符串"04/28/2021 04:25p"
。无法将此字符串转换为 DateTime 值。
我尝试了以下方法:
var dateValue = DateTime.ParseExact(
"04/28/2021 04:25p",
"MM/dd/yyyy HH:mm tt",
new CultureInfo("en-US"));
我在这里缺少什么?
更新:我在我的代码中使用了双引号,忘记在此处添加双引号。现在更新问题。
【问题讨论】:
可能是双引号环绕字符串? "tt" 是当您期望字符串中有“AM/PM”时,“p”是什么,为什么它附加到分钟值?04/28/2021 04:25p
或 pm
之间有 p
后缀吗?
What is it I'm missing here?
- 我猜是m
您使用HH
,这是24 小时格式(小时在0..23
范围内)。这是正确的吗?通常我们将hh
- 12
小时格式与AM/PM
【参考方案1】:
您可以使用单个字母的 AM/PM 指示符,但它必须是大写的:
var dateValue = DateTime.ParseExact(
"04/28/2021 04:25p".ToUpper(),
"MM/dd/yyyy hh:mmt",
new CultureInfo("en-US"));
否则你需要添加'm':
var dateValue = DateTime.ParseExact(
"04/28/2021 04:25p"+"m",
"MM/dd/yyyy hh:mmtt",
new CultureInfo("en-US"));
第三个选项是编写自己的 CultureInfo,其中 DateTimeFormat.AMDesignator 是 'm' 而 DateTimeFormat.PMDesignator 是 'p':
public class SingleLetterDesignatorCultureInfo : CultureInfo
private DateTimeFormatInfo dateTimeFormatInfo;
public SingleLetterDesignatorCultureInfo():base(CultureInfo.InvariantCulture.Name)
dateTimeFormatInfo = base.DateTimeFormat;
dateTimeFormatInfo.PMDesignator = "p";
dateTimeFormatInfo.AMDesignator = "a";
public override DateTimeFormatInfo DateTimeFormat
get => dateTimeFormatInfo;
set => base.DateTimeFormat = value;
var dateValue = DateTime.ParseExact(
"04/28/2021 04:25p",
"MM/dd/yyyy hh:mmtt",
new SingleLetterDesignatorCultureInfo());
【讨论】:
谢谢@Palle,第三个选项最适合我。【参考方案2】:首先,使用双引号。 其次,您可以在输入的末尾添加一个“m”来帮助格式化。
string inputPlusM = "04/28/2021 04:25p" + "m";
var dt = DateTime.ParseExact(inputPlusM, "MM/dd/yyyy hh:mmtt", new System.Globalization.CultureInfo("en-US") );
【讨论】:
以上是关于字符串“04/28/2021 04:25p”未被识别为有效的日期时间的主要内容,如果未能解决你的问题,请参考以下文章
JSON.NET:字符串 '7/1/20 14:15' 未被识别为有效的 DateTime
SQLite 和 .net 字符串未被识别为有效的 DateTime