【问题标题】:Add time(span) to current date when it has AM/PM将时间(跨度)添加到具有 AM/PM 的当前日期
【发布时间】:2016-06-03 09:49:42
【问题描述】:

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

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”(即今天+时间跨度:格式不重要,但它应该代表相同的日期时间)。

.Net版本为2.0

【问题讨论】:

  • stackoverflow.com/questions/13044603/… 这与我的要求相反:)
  • 我认为你不需要做任何事情。 Net 库会产生您正在寻找的结果。
  • @jdweng,它不起作用,它每次都返回 false ..
  • 因此 starttime 将有“01/01/0001 ...”
  • 当解析失败时,DateTime 的默认值为 01/01/0001。当它成功解析没有问题时,日期将设置为当前日期,您无需添加任何内容。所以我认为你需要做的是当解析失败时中止应用程序或将 DateTime 设置为当前日期。不确定日期的格式。

标签: c# .net-2.0


【解决方案1】:

您提供的代码存在一些问题。第一个是您尝试将表示时间的字符串解析为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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多