我目前正在尝试解析可能是任何语言的时间戳,并且很难让TryParseExact工作。 遗憾的是,无法检查我的数据中的其他语言是什么,因此无法轻易解析(我知道)。我已经在谷歌上搜索了一段时间,似乎找不到任何有类似问题或可用解决方案的人。
示例日期:Lunes, 16 de febrero de 2015 a las 18:49 UTC-05
格式我到目前为止,看到https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.90).aspx:dddd, d 'de' MMMM 'de' yyyy 'a las' HH:mm 'UTC'zz
*
我的测试代码: http://ideone.com/o1yknS http://ideone.com/bZOD4H
为什么这不能正确解析?我怎样才能找到一个优雅的解决方案?
*我的问题是,我不知道如何摆脱“拉斯维加斯”的问题。和' de'在字符串中。这些可能并不总是相同的长度,甚至在相同的位置,所以我不能只使用子串。我现在只是使用这个字符串进行测试。
答案 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。另请注意,需要西班牙文化信息才能解析西班牙语的日期和月份名称。