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

时间:2015-12-16 03:51:27

标签: c# datetime phpmyadmin

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

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

要显示它,我在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语法中出错了?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

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

要将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-16"

但是,由于您使用ParseExact,因此dateBuy2的输入也必须采用" 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先生提出建议后编辑]