我正在尝试下面的代码尝试解析时间并将其添加到当前日期:
string[] sDatetimeFormat1 = { "M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
"MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
"M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
"M/d/yyyy h:mm", "M/d/yyyy h:mm",
"MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm" };
string[] sDatetimeFormat2 = { "HH:mm tt", "h:m t", "HH:mm:ss",
"HH:mm:ss tt", "h:m:s t"};
if (DateTime.TryParseExact(InputDateOrTime.Replace("\"", ""),
sDatetimeFormat1, new CultureInfo("en-US"), DateTimeStyles.None,
out sStartTime))
{
//something
}
else if (TimeSpan.TryParse(InputDateOrTime.Replace("\"", ""), out tsInput))
{
sStartTime = DateTime.Parse(DateTime.Today.ToString() + tsInput);
}
输入可能会出现在sDateTimeFormat1中,也可能出现在sDatetimeFormat2中,如果是sDatetimeFormat1那么我需要解析它。如果它与sDatetimeFormat2中一样,那么我需要将该时间添加到当前日期。
例: “06/03/2016 14:22:00”应解析为“06/03/2016 2:22:00 PM”
“2:22 PM”应解析为“06/03/2016 2:22:00 PM”(即今天+时间跨度:格式不重要,但它应代表相同的日期时间)。< / p>
.Net版本为2.0
答案 0 :(得分:0)
您提供的代码中存在一些问题。第一个是您尝试将表示时间的字符串解析为TimeSpan
对象。 TimeSpan
不代表时间,而是代表时差,例如2个小时。
第二个问题是你没有为你展示的字符串包含正确的格式化程序。它应该是"h:mm tt"
或只是"t"
。
以下代码执行您想要的转换:
string[] sDatetimeFormat2 = { "HH:mm tt", "h:m t", "HH:mm:ss",
"HH:mm:ss tt", "h:m:s t", "H:mm tt", "h:mm tt"};
DateTime tsInput;
var InputDateOrTime = "2:22 PM";
DateTime.TryParseExact(InputDateOrTime.Replace("\"", ""), sDatetimeFormat2, new CultureInfo("en-US"), DateTimeStyles.None, out tsInput);
Console.WriteLine(tsInput);
请注意,您不需要添加当前日期,因为DateTime.TryParseExact
会为您执行此操作。此示例的输出为6/3/2016 2:22:00 PM
。