【问题标题】:How To Parse Date From any datetime format to dd/mm/yyyy?如何将日期从任何日期时间格式解析为 dd/mm/yyyy?
【发布时间】:2011-11-29 03:08:13
【问题描述】:

我想将任何日期时间格式解析为 dd/MM/yyyy 格式。

这是我的代码

// dates i am providing are
// Sat, 01 Oct 2011 17:30:00 +0400
// and
// Sat, 01 October   2011 12:21:23 EST

Datetime  dt = Convert.toDateTime(pubDate);

这给了我以下异常

字符串未被识别为有效的日期时间。从索引 32 开始有一个未知单词

任何人都指导我如何将任何日期格式解析为一个? 任何帮助将不胜感激。

【问题讨论】:

  • 对于 DateTime.Parse 无法处理的任何内容,您必须尝试自定义格式字符串。 wduffy.co.uk/blog/…

标签: asp.net datetime format


【解决方案1】:

DateTime 不以“格式”存储日期 - 它使用内部表示。您需要解析一个传入的字符串,以便为DateTime 获取正确的值,并且当您想要显示它时,您可以将其格式化为任何显示。

最好的办法是使用TryParseExact 为其提供确切的格式字符串。您需要使用custom Date and Time format strings

使用采用string[] 格式字符串的重载 - 每个日期格式一个。

关于EST 部分 - 框架不支持命名时区。您可能想要编写一个包装器,将命名时区转换为等效但可解析的形式。

未经测试(基于 MSDN 示例):

string[] formats= {"ddd, dd/MMM/yyyy hh:mm:ss K", 
                   "ddd, dd MMMM yyyy hh:mm:ss EST"};

DateTime dateValue;

foreach (string dateString in dateStrings)
{
   if (DateTime.TryParseExact(dateString, formats, 
                              new CultureInfo("en-US"), 
                              DateTimeStyles.None, 
                              out dateValue))
      Console.WriteLine("Converted '{0}' to {1}.", dateString, dateValue);
   else
      Console.WriteLine("Unable to convert '{0}' to a date.", dateString);
}

【讨论】:

    【解决方案2】:

    从字符串中删除“EST”,它应该可以工作。

    【讨论】:

    • 这是一种重要的信息,尤其是如果目标是转换为 UTC。
    • 好的,请您指导我,它将始终是 EST,或者任何其他值也可以来这里?
    • @Joe 同意。我认为这属于“任何帮助”的标题... :)
    • EST 是时区,可能会有所不同。
    • @UMAR 我正在为您寻找更一致的答案,但我确实知道(根据我的经验)DateTime 解析器无法正确处理时区,因此为什么删除“EST”会有所帮助.. .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多