【问题标题】:String was not recognized as a valid DateTime phpMyAdmin字符串未被识别为有效的 DateTime phpMyAdmin
【发布时间】:2016-03-22 02:15:41
【问题描述】:

与 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 语法中犯了错误吗?感谢您的帮助。

【问题讨论】:

  • 为什么不想将数据库中的日期存储为 DateTime 而不是字符串?
  • 抛出异常时,dateBuy2的内容是什么(鼠标指向就可以了)?
  • @Martheen dateBuy2 不太重要。我可以删除它,我可以在“yyyy-MM-dd”之前移动txtDateBuy.Text
  • @jdweng 在数据库中,dateBuy 列是DateTime 类型。而且,我不知道如何像您所说的那样将日期存储为 DateTime 。我该怎么做?
  • 呃,这很重要。异常表示字符串格式不正确,所以需要检查 dateBuy2 的内容。

标签: c# datetime phpmyadmin


【解决方案1】:

[既然我们继续在cmets中不好(cmets会很长),我就在这里提出我认为的解决方案]

要将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”的内容

但是,由于您使用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 先生的建议编辑]

【讨论】:

  • 我建议使用 specific IFormatProvider 而不是 null,因为它使用 OP 的 CurrentCulture - 它可能使用不同的 @ 987654344@ 比 Gregorian - 结果 可能 与 OP 的预期不同。以InvariantCulture 为例。
  • 我像你说的那样使用 try-catch。我不再有这个错误:String was not recognized as a valid DateTime。但是,无论我插入正确的格式还是错误的格式,它都会显示我制作的 msgBox:Wrong format。但是,谢谢你的帮助
猜你喜欢
  • 2011-09-12
  • 2021-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多