C# 将DateTime从奇怪格式转换为DateTime对象

C# 将DateTime从奇怪格式转换为DateTime对象,c#,vb.net,datetime,C#,Vb.net,Datetime,通常,从字符串转换日期时间非常容易,但我遇到了以下格式: Mon Jan 05 17:38:34 +1100 2015 这看起来很奇怪,而且还导致DateTime.Parse失败。所有的元素都在那里。是否有一种方法可以将其转换为DateTime,而无需执行string.split来将其划分为块。它看起来确实可能是一个ISO标准,尽管我无法理解什么样的标准 为了澄清,我希望在使用C将上述示例字符串转换为.NET中的DateTime对象时得到一些帮助,如果可能的话,我更希望不分割字符串 @编辑们,

通常,从字符串转换日期时间非常容易,但我遇到了以下格式:

Mon Jan 05 17:38:34 +1100 2015
这看起来很奇怪,而且还导致DateTime.Parse失败。所有的元素都在那里。是否有一种方法可以将其转换为DateTime,而无需执行string.split来将其划分为块。它看起来确实可能是一个ISO标准,尽管我无法理解什么样的标准

为了澄清,我希望在使用C将上述示例字符串转换为.NET中的DateTime对象时得到一些帮助,如果可能的话,我更希望不分割字符串


@编辑们,为什么你们会批准编辑把一个停顿的句子改成一个蹩脚的英语句子?请停止编辑,以便在编辑时查看-。-

您可以指定确切的格式:

var text = "Mon Jan 05 17:38:34 +1100 2015"
var date = DateTime.ParseExact(text, "ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture);
如评论中所述,不太常见的zzz部分代表。因此,您可能更喜欢使用与DateTimeOffset相同的格式字符串进行解析,因为它比DateTime更好地处理此概念。但是,您的要求可能不允许这样做。

这对我来说很有效:

var dt = "Mon Jan 05 17:38:34 +1100 2015";

DateTime result;
DateTime.TryParseExact(dt, "ddd MMM dd HH:mm:ss zzzz yyyy", 
    CultureInfo.InvariantCulture, DateTimeStyles.None,  out result);

Console.WriteLine(result);

检查并确认。您认为+1100代表什么?你试过DateTime.TryParseExact吗?@Blackwood The+1100是时区偏移量。+1100可能是时区偏移量。整个字符串显然不是ISO8601,而是一些随机自定义格式。@AlexeiLevenkov-^^一些随机自定义格式,这也是我对此的想法/感受。问题是zzz希望在其中包含冒号。你是对的。我想它不需要冒号来解析。+1,实际上这是一个更好的答案,它实际上处理UTC偏移量,如果+1100是。zzz?还是zzzz?不知道有什么区别,但对我来说,这似乎需要zzzz。很好的解决方案。根据链接的文档,zzz涵盖小时和分钟。没有zzzz。这个答案对于处理任何潜在的异常或无效的内联格式也非常好。@SanuelJackson要真正处理无效的格式,必须检查TryParseExact是否返回True或False。@Blackwood-正确,我的意思是这个方法将返回DateTime对象结果。因此,如果我正在阅读的json api的开发人员更改了格式,它不会杀死我的程序-最坏的情况是,该字段没有日期时间: