字符串“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:25ppm 之间有 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

DatePicker 绑定到 DateTime。 “字符串未被识别为有效的日期时间”

添加到可见属性时,字符串未被识别为有效的布尔值

c# datetime.parseexact 字符串未被识别为有效的日期时间 [重复]