C# 字符串未被识别为有效的DateTime phpMyAdmin
与phpMyAdmin合作,希望从C#更新数据 我在phpMyAdmin中有C# 字符串未被识别为有效的DateTime phpMyAdmin,c#,datetime,phpmyadmin,C#,Datetime,Phpmyadmin,与phpMyAdmin合作,希望从C#更新数据 我在phpMyAdmin中有“yyyy-MM-dd”列dateBuy格式 为了显示它,我将C#中的格式更改为“dd/MM/yyyy” 这是代码:(我没有这个代码的问题) 为了更新数据库,我想将格式改回“yyyy-MM-dd”。但是,我有一个错误:“字符串未被识别为有效的日期时间” 这是我代码中的错误部分: string dateBuy2 = txtDateBuy.Text; dateBuy = (DateTime.ParseExact(dateBu
“yyyy-MM-dd”
列dateBuy
格式
为了显示它,我将C#中的格式更改为“dd/MM/yyyy”
这是代码:(我没有这个代码的问题)
为了更新数据库,我想将格式改回“yyyy-MM-dd”
。但是,我有一个错误:“字符串未被识别为有效的日期时间”
这是我代码中的错误部分:
string dateBuy2 = txtDateBuy.Text;
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
我的日期时间语法有错误吗?谢谢你的帮助。[由于我们继续评论是不好的(评论会很长),我将在这里提出我认为的解决方案] 要将
dateBuy
格式化为所需格式,还应将字符串格式放入ToString()
也就是说,而不是
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
放
否则,ToString()
可能会生成类似“2015-10-16 12:00:00 AM”的内容,而不是“2015-10-16”
但是,由于您使用的是ParseExact
,dateBuy2
的输入格式也必须是“yyyy-MM-dd”,这不符合此目的。您可以考虑使用<代码> DateTimePicker <代码>,这样您就可以控制输入格式。
或者,您可以使用DateTime.Parse
或TryParse
(如Martheen所建议的)来代替,类似这样的内容
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
如果输入必须在文本框中
最好放入try catch
,以防止程序在使用解析
时因输入格式错误而崩溃
其中,如果您使用TryParse
,则可以将其放在if-else
block语句中
DateTime dt;
if (DateTime.TryParse(txtDateBuy.Text, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out dt)) {
//correct format, do something using dt
} else {
//incorrect format, warns the user
}
要获取CultureInfo
enum
您需要添加对System.Globalization
[根据Soner Gonul先生的建议编辑]为什么不将日期作为日期时间而不是字符串存储在数据库中?当抛出异常时,dateBuy2的内容是什么(只需将鼠标指向它)?@Martheen dateBuy2并不太重要。我可以删除它,我可以将txtDateBuy.Text移到数据库中“yyyy-MM-dd”@jdweng-ii之前,dateBuy列是DateTime类型。而且,我不知道如何像你说的那样将日期存储为DateTime。我怎么做?嗯,这很重要。例外情况是字符串格式不正确,因此您需要检查dateBuy2的内容。我建议使用特定的
IFormatProvider
而不是null
,因为它使用OP的CurrentCulture
-它可能使用与Gregorian不同的Calendar
-结果可能与OP预期的不同。例如,使用InvariantCulture
。我像你说的那样使用try-catch。我不再有此错误:字符串未被识别为有效的日期时间
。但是,无论我插入正确的格式还是错误的格式,它都会显示我制作的msgBox:错误的格式
。但是,谢谢你的帮助
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
DateTime dt;
if (DateTime.TryParse(txtDateBuy.Text, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out dt)) {
//correct format, do something using dt
} else {
//incorrect format, warns the user
}