我需要在随机文化之间转换DateTime变量,这些变量将从配置文件中读取 .

我有 the following code which works but I don't know why ,我不确定我是否相信所有情况,因为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时不起作用?

如何保证两个运行时指定的文化之间的转换是正确的?