【问题标题】:Help converting a string date to a DateTime帮助将字符串日期转换为 DateTime
【发布时间】:2011-08-23 15:45:15
【问题描述】:

我在带有提交按钮的文本框上使用 Ajax 控件工具包日历扩展器。很简单。

调试器显示文本正在正确地传输到调用方法,但是这行转换代码将文本框文本转换为 1/1/0001 12:00:00 AM。文本框日期是这样的:4/15/2011

DateTime txtMyDate = Convert.ToDateTime(txtDate.Text);

我做错了什么?

【问题讨论】:

  • 那么,你想要一个仅包含日期的 DateTime 值吗?!

标签: c# asp.net


【解决方案1】:

有很多方法可以将文本转换为日期时间,试试这个:

DateTime txtMyDate = 
  DateTime.ParseExact(txtDate.Text, "M/d/yyyy", CultureInfo.InvariantCulture);

编辑:忘记了文化信息参数

【讨论】:

  • 这需要一个 IFormatProvider 作为它的第三个参数。
  • @Nick - 是的,我意识到我错过了它,编辑了它。谢谢。
【解决方案2】:

您应该使用DateTime.Parse() 方法:

DateTime txtMyDate = DateTime.Parse(txtDate.Text);

如前所述,您还可以使用如下所示的类似语法来使用DateTime.ParseExact()

DateTime txtMyDate = DateTime.ParseExact(txtDate.Text, 
                                         [string format], 
                                         [IFormatProvider provider]);

Parse 与 ParseExact:

Parse() - 假定数据是有效的,并尽最大努力使其适合类型,当开发人员有机会调用常识时,会强制执行看起来有些荒谬的事情。

ParseExact() - 只允许指定的确切格式,并且会抛出任何变化。

Source on Parse vs ParseExact

【讨论】:

  • 奇怪的是,MSDNConvert.ToDateTime(string) 实际上调用了DateTime.Parse(),所以我有点好奇为什么如果Convert.ToDateTime() 没有直接调用DateTime.Parse() 会起作用。跨度>
  • 您仍然收到 1/1/0001 12:00:00 AM 作为您的 DateTime?如果发生这种情况,则可能是数据未正确传递或未设置值的问题。
  • 是的,这是我的错。由于这个答案和 Matt Greer 的答案都是正确的,所以我选择了这个答案,因为它解释了 ParseParseExact 之间的区别。
  • 如果没有 using System.Globalization; 命名空间,这些都可以工作吗? ;)
【解决方案3】:

试试

DateTime instance = DateTime.Parse( txtDate.Text ) ;

它[在某种程度上] 可以灵活地接受什么。或者,DateTime.ParseExact() 将让您控制转换。

【讨论】:

    【解决方案4】:

    使用DateTime.ParseExact 从格式化的日期字符串中提取日期值:

    DateTime dateValue = 
       DateTime.ParseExact(stringDateValue, "M/d/yyyy", 
            CultureInfo.InvariantCulture);
    

    【讨论】:

      猜你喜欢
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2012-12-05
      相关资源
      最近更新 更多