【问题标题】:Having problems with a datetime string日期时间字符串有问题
【发布时间】:2014-03-12 14:43:08
【问题描述】:

我有这个方法可以返回星期几(星期三):

protected string GetDayOfWeek(string dateTimeString)
{
    DateTime result = DateTime.Parse(dateTimeString);
    string dayOfWeek = Enum.GetName(typeof(DayOfWeek), result.DayOfWeek);

    return dayOfWeek;    
}

我在 DateTime 结果 行上有一个断点来检查传入的字符串:

“格林威治标准时间 2014 年 3 月 12 日星期三 00:00:00”

上述方法给我错误:

“用户代码未处理FormatException”字符串无法识别 作为有效的日期时间。

我做错了什么?我拿不起来。

【问题讨论】:

标签: c# datetime


【解决方案1】:

DateTime.Parse(string) 使用当前文化的约定。所以我的猜测是“Wed, 12 Mar 2014 00:00:00 GMT”在您当前的文化中不是一个有效的日期。

你可以试试:

DateTime.Parse(dateTimeString, System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat)

这应该告诉解析器是文化独立的。

【讨论】:

  • 你做对了!问题在于当前的文化。非常感谢。您的回答将导致成功。
【解决方案2】:

你可以使用:

DateTime.Now.DayOfWeek;

并与DayOfWeekclass 进行比较。

【讨论】:

    【解决方案3】:

    尝试使用DateTime.ParseExact 方法并为您的输入提供准确的格式字符串。在您的情况下,呼叫应如下所示:

    DateTime myDate = DateTime.ParseExact("Wed, 12 Mar 2014 00:00:00 GMT", "ddd, dd MMM yyyy HH:mm:ss 'GMT'K", System.Globalization.CultureInfo.InvariantCulture);
    

    【讨论】:

    • 谢谢。你能告诉我你将如何修改上面的代码吗?如果我使用 ParseExact 而不是解析,则不会编译。
    • @Nullbyte ParseExtract 接受 3 个重载。这就是为什么它没有在您的代码中编译的原因。 msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.90).aspx
    【解决方案4】:

    这里发生了两件事:

    1. 将字符串解析为日期时间
    2. 从提供的 DateTime 中获取 DayOfWeek

    正如 Tor-Erik 建议的那样,您可以使用具有不变文化的 DateTime.Parse 来获取 DateTime。

    DateTime.Parse(
        dateTimeString,
        System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat)
    

    那么正如 Hevilávio Soares 建议的那样,您应该使用 DateTime 对象的内置函数来获取星期几。

    DateTime.Now.DayOfWeek;
    

    分离关注点并重用现有功能比编写自己的功能更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多