解析未指定语言的DateTime

时间:2016-02-15 16:02:21

标签: c# parsing datetime

我目前正在尝试解析可能是任何语言的时间戳,并且很难让TryParseExact工作。 遗憾的是,无法检查我的数据中的其他语言是什么,因此无法轻易解析(我知道)。我已经在谷歌上搜索了一段时间,似乎找不到任何有类似问题或可用解决方案的人。

示例日期:Lunes, 16 de febrero de 2015 a las 18:49 UTC-05

格式我到目前为止,看到https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.90).aspxdddd, d 'de' MMMM 'de' yyyy 'a las' HH:mm 'UTC'zz *

我的测试代码: http://ideone.com/o1yknS http://ideone.com/bZOD4H

为什么这不能正确解析?我怎样才能找到一个优雅的解决方案?

*我的问题是,我不知道如何摆脱“拉斯维加斯”的问题。和' de'在字符串中。这些可能并不总是相同的长度,甚至在相同的位置,所以我不能只使用子串。我现在只是使用这个字符串进行测试。

2 个答案:

答案 0 :(得分:1)

您的dateTimeFormat工作正常,但您正在执行ToLower(),因此找不到UTC

因此,请删除ToLower()或将dateTimeFormat字符串更改为使用utc而不是UTC

我已经将您的Ideone片段分叉,只是删除了日期时间字符串上的ToLower()d1被解析得非常好:http://ideone.com/Wstxaz

在此处复制代码,以防链接出现故障:

// Removed `ToLower()` at the end
string date = "Lunes, 16 de febrero de 2015 a las 18:49 UTC-05";
string dateTimeFormat = "dddd, d 'de' MMMM 'de' yyyy 'a las' HH:mm UTCzz";
DateTime d1;
DateTime.TryParseExact(date, 
                       dateTimeFormat, 
                       CultureInfo.GetCultureInfo("es-ES"),
                       DateTimeStyles.None, 
                       out d1);

现在针对您的问题:如果您不知道您将收到字符串的格式,则无法解析它。您需要一种格式(或格式列表)才能解析字符串中的日期时间。日期和日期中可能存在太多可能含糊不清的数字。时间字符串,只是能够明确地弄明白。

答案 1 :(得分:0)

我没有针对您的整个问题的解决方案,但您可以使用给定的格式解析您的示例字符串:

string dateTimeFormat = @"dddd, d \de MMMM \de yyyy a la\s HH:mm UTCzz";
DateTime d1;
DateTime.TryParseExact(date, dateTimeFormat, CultureInfo.GetCultureInfo("es-ES"), DateTimeStyles.None, out d1);

注意逃脱的" d"和" s"字符,24小时时间格式的HH,以及前面没有 - 的zz。另请注意,需要西班牙文化信息才能解析西班牙语的日期和月份名称。