使用DateTime.ParseExact C#无法将字符串识别为有效的DateTime

时间:2015-07-27 04:31:51

标签: c# parsing datetime

以为我解决了这个问题,但我仍然遇到问题。尝试运行此代码以在提示中解析用户输入的日期和时间,但是我尝试使用DateTime.ParseExact我得到错误无效的格式。样本日期:2015年7月24日下午9:08:19 PDT 2015年7月26日下午2:13:54 PDT

proxy

以下是提示框的代码:

        string afterpromptvalue = Prompt.ShowDialog("Enter earliest Date and Time", "Unshipped Orders");
        string beforepromptvalue = Prompt.ShowDialog("Enter latest Date and Time", "Unshipped Orders");

        string format = "MMM d, yyyy h:m:s tt PDT";
        CultureInfo provider = CultureInfo.InvariantCulture;

        DateTime createdAfter = DateTime.ParseExact(afterpromptvalue, format, provider);
        DateTime createdBefore = DateTime.ParseExact(beforepromptvalue, format, provider);`enter code here`

4 个答案:

答案 0 :(得分:2)

您提供的输入与预期不同,您输入的分数为2位而不是1位。由于您的预期时间格式为h:m:s,因此您无法提供9:08:19,但您需要输入9:8:19。

查看格式使用的正确用法msdn link:

https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

答案 1 :(得分:2)

考虑到您的两个字符串,您只需使用mm specifier代替m specifier,因为您的单个数字分钟为leading zeros

string format = "MMM d, yyyy h:mm:s tt PDT";

作为一个例子;

string s = "Jul 24, 2015 9:08:19 PM PDT";
DateTime dt;
if(DateTime.TryParseExact(s, "MMM d, yyyy h:mm:s tt PDT", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    // 24.07.2015 21:08:19
}

string s = "Jul 26, 2015 2:13:54 PM PDT";
DateTime dt;
if(DateTime.TryParseExact(s, "MMM d, yyyy h:mm:s tt PDT", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    // 26.07.2015 14:13:54
}

答案 2 :(得分:1)

试试这个: 问题可能是您转换为具有特定格式的日期时间,但未提供与输入相同的内容:

dateString = "Sun 15 Jun 2008 8:30 AM -06:00";
      format = "ddd dd MMM yyyy hh:mm:ss tt zzz";
      try {
         result = DateTime.ParseExact(dateString, format, provider);
         Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
      }
      catch (FormatException) {
         Console.WriteLine("{0} is not in the correct format.", dateString);
      }

答案 3 :(得分:1)

通过Console程序快速检查您的代码,它向我的PC显示它正常工作:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Globalization;

    namespace DateTimeConvert
    {
        class Program
        {
            static void Main(string[] args)
            {

                var text1 = "Jul 24, 2015 9:08:19 PM PDT";
                var text2 = "Jul 26, 2015 2:13:54 PM PDT";

                string format = "MMM d, yyyy h:m:s tt PDT";

                var date1 = DateTime.ParseExact(text1, format, CultureInfo.InvariantCulture);
                Console.WriteLine(date1);

                var date2 = DateTime.ParseExact(text2, format, CultureInfo.InvariantCulture);
                Console.WriteLine(date2);

                Console.ReadLine();
            }
        }
    }

您是否可以运行上面的代码并查看它是否仍然抛出相同的异常?可能还有其他一些领域需要检查。