C# 字符串未被识别为有效的DateTime 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

与phpMyAdmin合作,希望从C#更新数据

我在phpMyAdmin中有
“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
}