字符串未被识别为有效的DateTime phpMyAdmin

本文关键字:DateTime phpMyAdmin 有效 识别 字符串 | 更新日期: 2023-09-27 18:26:53

使用phpMyAdmin,希望从C#更新数据。

我在phpMyAdmin中为列dateBuy使用了"yyyy-MM-dd"格式。

为了显示它,我在C#中将格式更改为"dd/MM/yyyy"

这是代码:(我对这个代码没有问题)

string dateBuy = dr.GetValue(1).ToString();
DateTime time = DateTime.Parse(dateBuy);
dateBuy = time.ToString("dd/MM/yyyy");

为了更新数据库,我想将格式改回"yyyy-MM-dd"。但是,我有一个错误:"String was not recognized as a valid DateTime"

这是我代码的错误部分:

string dateBuy2 = txtDateBuy.Text;
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();

我在DateTime语法中犯了错误吗?谢谢你的帮助。

字符串未被识别为有效的DateTime phpMyAdmin

[由于如果我们继续评论(评论会很长)是不好的,我只在这里提出我认为的解决方案]

要将dateBuy格式化为您想要的格式,您还应该将字符串格式放在ToString()

也就是说,代替

dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();

放入

dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");

否则,ToString()可能会生成类似"2015-10-16 12:00:00 AM"的内容,而不是"2015-10-116"

但是,由于您使用ParseExactdateBuy2的输入也必须采用"yyyy-MM-dd"格式,这与目的不符。您可以考虑使用DateTimePicker来控制输入格式。

或者,您可以使用DateTime.ParseTryParse(如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
}

如果输入必须在TextBox中,则最好放置try-catch,以防止在使用Parse时由于输入格式错误而导致程序崩溃。

如果你使用TryParse,你可以把它放在if-else块语句中,而不是

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先生的建议编辑]