使用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语法中出错了?谢谢你的帮助。
答案 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.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
}
如果输入必须在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先生提出建议后编辑]