2015-06-17 53 views
1

我想解析DateTime(在C#中)从en-USde-DE或只是以不同的格式。输入日期时间是06/17/2015 09:22:30 AMDateTime.ParseExact不起作用,因为我期望

我已经试过:

DateTime date = DateTime.ParseExact(dateString, "d.MM.yyyy HH:mm:ss", new CultureInfo("de-DE")); 
两个版本我有同样的输出

DateTime date = DateTime.ParseExact(dateString, "d.MM.yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

- 这意味着在输出相同的输入,一切都没有改变。我可以在ToString()方法中更改它,但我需要它作为DateTime。

string test = datum.ToString("d.MM.yyyy HH:mm:ss"); 
output is `17.06.2015 09:22:30` 

当前线程的CurrentCultureInfo可能是问题吗?因为当前线程设置为CultureInfo en-US。 我已将CultureInfo.DefaultThreadCurrentUICulture设置为de-DE,但它也不起作用。

我失去了什么?我相信这只是我脑海中的一个缺点。如果解决方案非常简单 - 抱歉的时间 - 无论如何,谢谢你的每一个答案!

+1

是否正确解析?我怀疑是因为你在'06/17/2015 09:22:30 AM'上使用了错误的格式。所以这个问题我不清楚。什么意思_“输出 - 输出==输入”_? –

+0

对不起,这个文本部分没有写得很清楚。只是想说输出和输入完全一样!我的错! –

+1

'DateTime' *没有格式*。如果你想要输出特定的格式,它总是在'ToString'(或'string.Format'等)中。 'DateTime.ParseExact'只是将一个已知格式的字符串(注意你的错误)转换为'DateTime';但'DateTime'确实*不*保存关于格式的信息。只要使用正确的'ToString'过载,例如'datum.ToString(CultureInfo.GetCultureInfo( “去-DE”))'。 – Luaan

回答

3

这就是CultureInfo.InvariantCulture默认格式,所以你不需要使用ParseExact

DateTime date = DateTime.Parse(dateString, CultureInfo.InvariantCulture); 
string inGermanFormat = date.ToString("d.MM.yyyy HH:mm:ss", new CultureInfo("de-DE")); 
+0

就像Luaan说的,我必须在'ToString()'方法中完成它。我一直认为我可以直接用'DateTime.Parse'方法做到这一点。感谢您提供快速简单的答案。 –

+1

@DaveStockinger:是的,他是对的,'DateTime'只是一个值。在内部它基本上只是一个'UInt64'(无符号的64位整数)。因此,如果不将其显示为字符串,则没有格式。 –

+0

所以'DateTime'计算为'Ticks'的权利?就像我之前说过的 - 我以为我可以直接在'DateTime'变量中更改'CultureInfo',并将'CultureInfo'保存在其中。但是现在一切都很清晰,逻辑!再次感谢! –

相关问题