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寻求帮助和支持,Rik,Phillip ,Joel和Kent以及其他所有人。
答案 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);