Winforms文本框中的C#日期更改月份和日期

本文关键字:日期 文本 Winforms | 更新日期: 2023-09-27 18:21:24

我有一个c#winforms应用程序,它被数据绑定到具有多个日期的表。客户要求可以使用文本框输入日期。然而,我无法让它正常工作。问题是,当我离开文本框时,日期和月份会发生变化。所以当我输入9-12-1950时,它会显示为12-09-1950。当我键入09-12-1950时也是如此。在内部,日期存储为yyyy-MM-dd。数据绑定是使用格式dd MM yyyy启用的。我使用验证事件来检查日期是否有效,如:

  if (DateTime.TryParseExact(tbDate.Text, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue))
                tbDate.Text = String.Format("{0:dd-MM-yyyy}", dateValue);

当我调试时,我看到tbDate的文本值仍然是正确的格式,例如在我的情况下是9-12-1950。我还看到,从TryParseExact返回的dateValue包含相同的日期,但格式为MM/dd/yyyy。

将日期保存到数据库设置为Validation。我在这里错过了什么?

[更新]也许我的解释不够清楚。日期以DateTime(而不是varchar)类型的yyyy-MM-dd格式存储在SQL Db中。在我的表单上,我想将其显示和编辑为dd-MM-yyyy(还有一些其他格式,如:"dd/MM/yyyy"、"dd/M/yyyy","d/M/yyyy"、"ddMM/yy"、"dd/M/yy"、"d/M/yy","dd-M-yyyy","dd-M-yy","d-M-yyyy"d-MM-yy"dd-MM-yy"MM-y".

打字是有效的,但一旦我离开TextBox,日期和月份就会发生变化。我想我错过了什么。只是不知道是什么。

Winforms文本框中的C#日期更改月份和日期

我觉得有点傻,问题是由本地系统设置引起的,该设置被设置为M/d/yyyy。我把它改成了我当地的文化,解决了这个问题。