运行时出现该字符串未被识别为有效的 DateTime。有一个从索引 0 处开始的未知字。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行时出现该字符串未被识别为有效的 DateTime。有一个从索引 0 处开始的未知字。相关的知识,希望对你有一定的参考价值。

if (Request.QueryString["t1"] != null && Request.QueryString["tt1"] != null)


search += " and (order29 BETWEEN '" + Convert.ToDateTime("t1") + "' AND '" + Convert.ToDateTime("tt1") + "')";

查找一时间段数据库的内容,order29为数据字段,tt1,t1为输入的内输:2012-10-1...

如果是sqlserver 查询的话 应该不要转成 dateTime 直接把字符窜放进去就可以查。
search += " and (order29 BETWEEN '" + Convert.ToDateTime(Request.QueryString["t1"] ) + "' AND '" + Convert.ToDateTime(Request.QueryString["tt1"] ) + "')";

如果过这样 Convert.ToDateTime(Request.QueryString["tt1"] ) 还报错 “该字符串未被识别为有效的 DateTime” 那么是就是传过来的值 不是规范的时间格式。
参考技术A 你是不能直接引用“t1”和“tt1”的,Convert.ToDateTime("t1") 是对字符串“t1”进行转换,这个t1并不是你传过来的Request.QueryString["t1"] 。
if (Request.QueryString["t1"] != null && Request.QueryString["tt1"] != null)

string str1 = Request.QueryString["t1"].ToString();
string str2 = Request.QueryString["tt1"].ToString();
search += " and (order29 BETWEEN '" + Convert.ToDateTime(str1) + "' AND '" + Convert.ToDateTime(str2) + "')";
参考技术B 建议写法:

DateTime t1;

DateTime t2;

if(DateTime.TryParse(Request.QueryString["t1"], out t1) && DateTime.TryParse(Request.QueryString["t11"], out t2))


search += " and (order29 BETWEEN '" + t1 + "' AND '" + t2+ "')";
参考技术C 流量 参考技术D 楼上正解

字符串“04/28/2021 04:25p”未被识别为有效的日期时间

【中文标题】字符串“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") );

【讨论】:

以上是关于运行时出现该字符串未被识别为有效的 DateTime。有一个从索引 0 处开始的未知字。的主要内容,如果未能解决你的问题,请参考以下文章

JSON.NET:字符串 '7/1/20 14:15' 未被识别为有效的 DateTime

Angular CLI 'ng' 未被识别为有效命令

字符串格式未被识别为有效的日期时间格式[关闭]

SQLite 和 .net 字符串未被识别为有效的 DateTime

字符串“04/28/2021 04:25p”未被识别为有效的日期时间

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