【问题标题】:Convert 12hr Time String to DateTime object将 12 小时时间字符串转换为 DateTime 对象
【发布时间】:2013-04-10 08:39:16
【问题描述】:

所以我正在处理一些原始 XML,它有一个带有值的时间元素

晚上 10:30

反之亦然

上午 10:30

等等等等

假定日期是今天...

如果我要使用 DateTime.TryParse;有人愿意帮忙制作一个 FormatProvider 来完成这项工作吗?

如果其他人有更聪明的解决方案,它不一定是 DateTime.TryParse..

【问题讨论】:

  • ParseExactTryParseExact 是你想要的。
  • 唯一聪明的解决办法是使用解析。

标签: c# datetime


【解决方案1】:

您不需要使用自定义格式提供程序 - 您只需使用 AM/PM designator specifier ("tt") 指定 custom format string

DateTime result;
if (DateTime.TryParseExact(text, "hh:mmtt", CultureInfo.InvariantCulture,
                           DateTimeStyles.None, out result))
{
    Console.WriteLine("Parsed to: {0}", result);
}

【讨论】:

  • 哇,真快。我会检查一下。我需要将结果添加到 DateTime.Today 吗?
  • @daveL:IIRC,它默认为今天 - 但为了清楚起见,我个人会明确说明。 (将result.TimeOfDay 添加到DateTime.Today。)
  • 乔恩,感谢您的帮助。 6 个值中有 4 个被完美解析。但是这些都是 PM 时间;两个 AM 时间未能解析 - 我认为这可能是因为时间字符串是“8:15AM”而不是“08:15AM”......我的怀疑是否正确?
  • @daveL:在这种情况下,您应该指定h:mmtt 而不是hh:mmtt
  • 是的......这就是我的推测。我创建了一个扩展,它将为这两种情况内联完成。感谢您的帮助。
【解决方案2】:

您可以使用DateTime.TryParseExact 尝试此操作,并确保使用hh 表示12 小时和HH 表示24 小时的格式,MM 表示分钟和mm 表示分钟。查看here 了解更多自定义选项:

string strTime = "10:30AM";
DateTime dtTime;
if(DateTime.TryParseExact(strTime, "hh:mmtt",  
   System.Globalization.CultureInfo.InvariantCulture, 
   System.Globalization.DateTimeStyles.None, out dtTime))
 {
    Console.WriteLine(dtTime);
 }

【讨论】:

    猜你喜欢
    • 2015-01-09
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多