运行时出现该字符串未被识别为有效的 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...
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: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") );
【讨论】:
以上是关于运行时出现该字符串未被识别为有效的 DateTime。有一个从索引 0 处开始的未知字。的主要内容,如果未能解决你的问题,请参考以下文章
JSON.NET:字符串 '7/1/20 14:15' 未被识别为有效的 DateTime
SQLite 和 .net 字符串未被识别为有效的 DateTime