C#:这段代码有什么错误?

时间:2009-12-11 14:32:34

标签: c#

using System;
using System.Globalization;

namespace ConsoleApplication20
{
    class Program
    {

        static void Main(string[] args)
        {     

string[] formats ={
            "MM/dd/yyyy HH:mm:ss tt",
            "MM/dd/yyyy HH:mm:ss",
            "MM/dd/yyyy H:mm:ss tt",
            "MM/dd/yyyy H:mm:ss",
            "M/dd/yyyy HH:mm:ss tt",
            "M/dd/yyyy HH:mm:ss",
            "M/dd/yyyy H:mm:ss tt",
            "M/dd/yyyy H:mm:ss",
            "MM/d/yyyy HH:mm:ss tt",
            "MM/d/yyyy HH:mm:ss",
            "MM/d/yyyy H:mm:ss tt",
            "MM/d/yyyy H:mm:ss", 
            "M/d/yyyy HH:mm:ss tt",   
            "M/d/yyyy HH:mm:ss", 
            "M/d/yyyy H:mm:ss tt", 
            "M/d/yyyy H:mm:ss"     
          };
        string date1 = "11/08/2008 4:00:49";

        DateTime result;
        if (DateTime.TryParseExact(date1, formats,
                          new CultureInfo("en-US"),
                          DateTimeStyles.None,
                          out result))
        {
            DateTime startTime = result;
        }

        Console.Write(startTime);

   }
    }
}

请解释我..为什么总是if语句返回false ...

由于Thanx寻求帮助和支持,RikPhillipJoelKent以及其他所有人。

8 个答案:

答案 0 :(得分:20)

您已在要将其打印出来的其他块的范围内声明了startTime。尝试更改为:

if (DateTime.TryParseExact(date1, formats,
    new CultureInfo("en-US"),
    DateTimeStyles.None,
    out result))
{
    DateTime startTime = result;
    Console.Write(startTime);
}

答案 1 :(得分:8)

您应该声明(并初始化)

DateTime startTime

在IF声明之外,或

Console.WriteLine(startTime)

在IF声明中。

您可以尝试将DateTimeStyles参数的值更改为AssumeLocal或AssumeUniversal(取决于您的需要),以允许缺少时区规范。

答案 2 :(得分:5)

Kent Boggart确定了您的编译错误,但我注意到您的格式存在另一个问题。您正在混合使用不同月,日,小时和上午/下午格式的组合,但您只对小时格式使用大写“H”。大写'H'表示使用24小时时间,而小写'h'表示使用12小时时间。因此,对于没有'tt'选项的样本,您应该只有大写的'H',如下所示:

string[] formats ={
        "MM/dd/yyyy hh:mm:ss tt",
        "MM/dd/yyyy HH:mm:ss",
        ....
};

答案 3 :(得分:3)

这是一个有效的代码片段 - 没有编译器错误,'if'语句成功。请注意,您需要在文件末尾放置一个Console.ReadKey(),以防止cmd窗口过快消失。

using System;
using System.Globalization;

namespace so1888431_timestringparse
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] formats ={
            "MM/dd/yyyy HH:mm:ss tt",
            "MM/dd/yyyy HH:mm:ss",
            "MM/dd/yyyy H:mm:ss tt",
            "MM/dd/yyyy H:mm:ss",
            "M/dd/yyyy HH:mm:ss tt",
            "M/dd/yyyy HH:mm:ss",
            "M/dd/yyyy H:mm:ss tt",
            "M/dd/yyyy H:mm:ss",
            "MM/d/yyyy HH:mm:ss tt",
            "MM/d/yyyy HH:mm:ss",
            "MM/d/yyyy H:mm:ss tt",
            "MM/d/yyyy H:mm:ss", 
            "M/d/yyyy HH:mm:ss tt",   
            "M/d/yyyy HH:mm:ss", 
            "M/d/yyyy H:mm:ss tt", 
            "M/d/yyyy H:mm:ss"     
          };
            string date1 = "11/08/2008 4:00:49";

            DateTime result;
            if (DateTime.TryParseExact(date1, formats,
                              new CultureInfo("en-US"),
                              DateTimeStyles.None,
                              out result))
            {
                DateTime startTime = result;
                Console.Write(startTime);
            }
            Console.ReadKey();
        }
    }
}

答案 4 :(得分:2)

startTime仅在if语句的范围内定义 将Console.write移动到if语句中,或在其上面声明变量

答案 5 :(得分:2)

编译错误的原因是因为startTime超出了范围。

正确解决问题的方法是在if。

中打印result

答案 6 :(得分:2)

startTime仅在if语句的结果为真时声明。

Console.Write(startTime)超出此if,因此如果if未返回true,则startTime将不存在。

答案 7 :(得分:2)

你在if中声明并初始化startTime。尝试

        DateTime result;
        DateTime startTime = new DateTime;
        if (DateTime.TryParseExact(date1, formats,
                          new CultureInfo("en-US"),
                          DateTimeStyles.None,
                          out result))
        {
            startTime = result;
        }

        Console.Write(startTime);