【问题标题】:Convert string to mm/dd/yyyy datetime将字符串转换为 mm/dd/yyyy 日期时间
【发布时间】:2014-05-02 12:18:19
【问题描述】:

我正在尝试将来自文本框的字符串转换为日期时间,例如以这种格式“03/24/2014”。这就是我正在尝试的:

CultureInfo us = new CultureInfo("en-US");                    
dtAssemblyDate = DateTime.ParseExact(txtOperationSignatureDate.Value, "dd/MM/yyyy", us);

dtAssemblyDate = DateTime.ParseExact(txtOperationSignatureDate.Value, "dd/MM/yyyy", null);

但是没有运气,我遇到了无法将值转换为 DateTime 的异常。我该如何解决这个问题?

【问题讨论】:

  • 你的意思是MM/dd/yyyy
  • 不清楚,是要根据文化转换还是根据特定格式转换。如果 ParseExact 失败,那是因为字符串不是那种确切的格式...
  • 确保您将正确的格式传递给 PArseExact,并且不要输入文化信息,当您想要自己的格式时不需要它
  • 为什么不使用专门为 DateTime 设计的控件,比如 DateTimePicker,而不是文本框?那么你就不需要任何转换了,因为你已经有了一个 DateTime!

标签: c# asp.net vb.net date datetime


【解决方案1】:

尝试使用

字符串日期 = textbox.Value;

DateTime dt = Convert.ToDateTime(date);

【讨论】:

    【解决方案2】:

    03/24/2014 不是 dd/MM/yyyy 格式的有效日期(一年只有 12 个月1)。

    要么将格式字符串更改为 MM/dd/yyyy,要么使用所选格式的有效日期。

    1:在某些类型的Calendar 中或13 个月,但"en-US" 使用12 个月Gregorian calendar

    【讨论】:

      【解决方案3】:

      03/24/2014月份中的某天 作为中间部分。这可能看起来很奇怪,但that's how it's done in some parts of the world(主要是北美)。

      因此,在指定解析格式时,您还必须将月份的日期 (dd) 放在中间:

      CultureInfo us = new CultureInfo("en-US");                    
      dtAssemblyDate = DateTime.ParseExact(txtOperationSignatureDate.Value, "MM/dd/yyyy", us);
      

      显然,无法解析同时接受中端 (MM/dd/yyyy) 和小端 (dd/MM/yyyy) 日期的文本字段,因为无法自动解决像 01/02/2014 这样的歧义。

      【讨论】:

        【解决方案4】:
        DateTime myDate = DateTime.ParseExact("24/03/2014", "dd/MM/yyyy",
                                               System.Globalization.CultureInfo.InvariantCulture);
        

        【讨论】:

          【解决方案5】:

          如果字符串以MM/dd/yyyy格式表示则

          CultureInfo us = new CultureInfo("en-US");                    
          dtAssemblyDate = DateTime.ParseExact(txtOperationSignatureDate.Value, "MM/dd/yyyy", us);
          

          但我更喜欢使用 DateTime.TryParse 来避免意外......

          if(DateTime.TryParse(txtOperationSignatureDate.Value, 
                               CultureInfo.InvariantCulture, 
                               DateTimeStyles.None, 
                               out dtAssemblyDate))
              Console.WriteLine(dtAssemblyDate.ToShortDateString());
          

          【讨论】:

            【解决方案6】:
             CultureInfo us = new CultureInfo("en-US");
             DateTime dt = Convert.ToDateTime(txtOperationSignatureDate.Value, us.DateTimeFormat);
            

            无论你需要什么 DateTimeFormat,你只需要传递相应的文化。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-05-19
              • 1970-01-01
              • 2021-03-19
              • 2013-10-19
              • 2011-11-01
              • 2015-06-29
              • 2018-04-07
              • 1970-01-01
              相关资源
              最近更新 更多