1

我在 SQL 中将日期存储为 DateTime,当在文本框中显示它们时,我这样做:

txtDateLogged.Text = v.DateLogged.ToString("dd-MM-yyyy");

但是,当我更新该文本框以写回 SQL 时,我在使用这个时得到了无效的 DateTime 错误:

if (DateLogged!= "")
{ 
     uInput.DateLogged = Convert.ToDateTime(DateLogged);
}

我假设我在格式中遗漏了一些东西 - 日期值被传递到公共 void 作为字符串进行更新,然后在上面的行中转换。有什么建议么?

谢谢

4

4 回答 4

8

您需要以与您转换文本的格式相同的格式转换回来,例如

uInput = DateTime.ParseExact(text, "dd-MM-yyyy", CultureInfo.InvariantCulture);

有关更多详细信息,请参阅文档DateTime.ParseExact

当然,如果您可以避免转换为字符串表示形式——或者也保留它DateTime——那就更好了。

如果您正在解析用户输入,则应该使用它DateTime.TryParseExact来解决无效数据的可能性,而无需使用异常进行流控制。

于 2012-06-27T11:04:55.477 回答
0

也许使用:

 uInput.DateLogged = (new DateTime(year, month, day))

并从 DateLogged 中提取年/月/日部分。

编辑:

既然您知道字符串中的日期是“dd-MM-yyyy”,那么这就是您提取部分的方式:

int year = Convert.ToInt16(DateLogged.Substring(6, 4));
int month = Convert.ToInt16(DateLogged.Substring(3, 2));
int day = Convert.ToInt16(DateLogged.Substring(0, 2));

如果 MM 的意思是“JA” - 那么您需要将“JA”转换为“01”或 1。

于 2012-06-27T11:04:53.817 回答
0

您还可以使用DateTime.TryParse和解析字符串值CultureInfo
用户将能够使用特定于文化的格式输入数据,并且您可以将其转换为InvariantCulture

 DateTime b;
 bool isCorrectValue = false;
 CultureInfo uiCulture = Thread.CurrentThread.CurrentUICulture;
 if (DateTime.TryParse(DateLogged, uiCulture, DateTimeStyles.None, out b))
     isCorrectValue = true;
于 2012-06-27T11:15:44.430 回答
0

在 SQL 中以105格式转换日期

例如

选择转换(varchar(20),getdate(),105

于 2012-06-27T12:06:48.063 回答