当AM / PM

时间:2016-06-03 09:49:42

标签: c# .net-2.0

我正在尝试下面的代码尝试解析时间并将其添加到当前日期:

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

1 个答案:

答案 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