【问题标题】:DateTime Format not being recognized日期时间格式无法识别
【发布时间】:2014-08-14 20:54:10
【问题描述】:

我有一个需要进入DateTime 对象的日期。在下面的代码中,我将filedate 设置为我得到的日期字符串,然后尝试两种不同的格式(paternpatern2。它无法识别格式并且总是落入 else 块,我不明白我需要的日期时间对象。我使用我在 MSDN 上 this page. 上找到的说明符设置了格式字符串。

string filedate = "Tue Aug 12 16:01:29 CDT 2014";
string patern = "ddd MMM d hh:mm:ss CDT yyyy";
string patern2 = "ddd MMM dd hh:mm:ss CDT yyyy";
DateTime dat;
CultureInfo enUS = new CultureInfo("en-US");
string outString = "";
if (DateTime.TryParseExact(filedate, patern, enUS, System.Globalization.DateTimeStyles.None, out dat))
{
    outString = (dat.ToShortDateString() + " " + dat.ToShortTimeString());
}
else if (DateTime.TryParseExact(filedate, patern2, enUS, System.Globalization.DateTimeStyles.None, out dat))
{
    outString = (dat.ToShortDateString() + " " + dat.ToShortTimeString());
}
else
{
    outString = filedate.Trim(); //always falling to here
}

【问题讨论】:

  • 使用 HH 代替 hh。 HH 指定 24 小时格式,hh 指定 12 小时格式。
  • @cahinton 那是我错的一部分,谢谢。

标签: c# .net datetime datetime-format


【解决方案1】:

三个问题:

  • 您的两个模式应变是相同的 - 为什么要同时尝试它们?
  • hh 表示 12 小时制的小时; 16 不是有效值
  • 您应该将 CDT 部分作为文字转义

我怀疑你想要:

"ddd MMM d HH:mm:ss 'CDT' yyyy";

此外,如果始终使用英文,您可能希望使用CultureInfo.InvariantCulture

最后,我怀疑这只会在夏天有效……在冬天,我猜你会改用CST。不幸的是,这是一种可怕的格式......您可能很想在解析之前使用字符串操作来去除 CST/CDT(或其他任何东西 - 它总是中心时间吗?)。据我所知,不支持解析这些内容。

【讨论】:

  • 谢谢乔恩!我只是在做一种模式,但第二种是玩不同的选择。看起来像 HH 并转义了 cdt。它应该始终是一个 cdt,但我正计划处理接下来的那些,应该能够通过字符串操作来处理它。
猜你喜欢
  • 2018-06-11
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
相关资源
最近更新 更多