我需要在随机文化之间转换DateTime变量,这些变量将从配置文件中读取。
我以下代码有效,但我不知道为什么,而且我不确定我是否相信所有情况,因为DateTime.Parse没有指定参数convertedDt变量的格式是什么。
void ATestConversion(DateTime testDate)
{
CultureInfo ci = CultureInfo.CreateSpecificCulture("de-DE"); // assume de-DE read from config
string convertedDt = testDate.ToString(ci);
// How does this work without knowing convertedDt culture?
DateTime myDate = DateTime.Parse(convertedDt, CultureInfo.CreateSpecificCulture("fr-FR")); // fr-FR read from config
}
但是,每当我尝试下面的代码时,我希望工作,我得到:字符串无法识别为有效的DateTime
myDate = DateTime.ParseExact(convertedDt, ci.DateTimeFormat.FullDateTimePattern, new CultureInfo("fr-FR"));
在这段代码中,我可以提供入站字符串所在的动态格式,以及需要转换为的CultureInfo。
我看到很多这样的例子:
DateTime.ParseExact(myDate, "dd/MMM/yyyy HH:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture);
格式是硬编码的。我基本上试图用动态格式做同样的事情。为什么我的代码在指定文化A的FullDateTimePattern和文化B的实际CultureInfo时不起作用?
如何保证两个运行时指定的文化之间的转换是正确的?