【问题标题】:vb.net converting string to date formatvb.net 将字符串转换为日期格式
【发布时间】:2021-01-19 22:31:29
【问题描述】:

我正在尝试在 vb 上将字符串转换为日期,但由于某种原因,我收到以下错误消息。

System.FormatException: 'String was not recognized as a valid DateTime.'

我正在从 winform 上的日期控件获取日期

dim selectedDate as string = dateControl1.text
dim selectedDt as Date = Date.Parse(selectedDate)

但如果我将相同的值放入代码中而不是从 dateControl 中获取,则可以

dim selectedDate as string = "19/01/2021"
dim selectedDt as Date = Date.Parse(selectedDate)

所以我尝试查看 dateControl1 的值与键入代码时是否有任何不同,因为 dateControl1.text 应该返回相同的字符串值,所以我尝试这样做

dim selectedDate as string = "19/01/2021"
if selectedDate = dateControl1.text then
  debug.print ("same")
else
  debug.print ("different")
end if

当我运行它时,调试打印“相同”

如果我这样做

dim selectedDate as string = "19/01/2021"
if selectedDate = dateControl1.text then
  debug.print ("same")
else
  debug.print ("different")
end if

dim selectedDt as Date = Date.Parse(dateControl1.text)

即使调试说“相同”,我也会收到相同的错误

所以我真的很困惑,为什么当我从 dateControl1.text 获取值时 date.parse 显示错误并且它是完全相同的字符串

我错过了什么吗?

感谢您的帮助。

问候

  • 哈里斯-

【问题讨论】:

  • 当前 CultureInfo 的日期/时间格式是什么?试试DateTime.TryParse(),提供解析格式。什么是日期控件(什么平台提供的控件)?是不是提供了一个Value属性返回一个Date对象?
  • 您很可能在标准日期格式为“MM/dd/yyyy”的系统上传递的值只能解释为“dd/MM/yyyy”。您需要使用 ParseExactTryParseExact 并指定确切的格式,或者调用 ParseTryParse 并提供一个提供适当日期格式的 IFormatProvider。正如建议的那样,如果您使用的是 WinForms 和 DateTimePicker 控件,那么您不应该触摸它的 Text 属性,而是使用 Value 属性。

标签: vb.net


【解决方案1】:

你可以试试这个方法,应该可以的:

dim selectedDt as Date = DateTime.ParseExact(dateControl1.text, "dd/MM/yyyy", CultureInfo.InvariantCulture)

为了更安全,您必须先仔细检查文本框的值。通过try

DateTime.ParseExact Method

【讨论】:

    【解决方案2】:

    日期控件是什么控件?如果它是 DateTimePicker,那么您可以使用 .Value 属性获取日期,而无需进行任何转换。

    dim selectedDt as Date = dateControl1.Value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-28
      • 1970-01-01
      • 2014-01-18
      • 2019-10-13
      相关资源
      最近更新 更多