使用英语文化将日期时间解析为月份时,仍然使用土耳其语进行语法分析

Mon*_*RPG 7 c# string culture datetime string-formatting

这是代码.我仍然得到不正确的结果

string srRegisterDate = "25.07.2009 00:00:00"
CultureInfo culture = new CultureInfo("en-US");
srRegisterDate = String.Format("{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate), culture);
Run Code Online (Sandbox Code Playgroud)

结果是 Cumartesi, Temmuz 25, 2009

相反它应该是 Saturday, July 25, 2009

我该如何解决这个错误?

C#.net v4.5.2

Son*_*nül 6

Convert.ToDateTime(srRegisterDate) 仍然使用基于日期和月份名称的CurrentCulture看起来像你的tr-TR.Cumartesi - Temmuz

String.Format,你的文化将被忽略,因为你用它作为参数的第三个参数,但你永远不会使用它.

您的代码称为Format(string format, object arg0, object arg1)重载.但你永远不会使用arg1.这种超载并不认为这是一种文化.它认为这是你要格式化的另一个论点.

String.Format有一个重载IFormatProvider作为第一个参数.

例如;

srRegisterDate = String.Format(culture, "{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate));
Run Code Online (Sandbox Code Playgroud)

但大多数comman方式(我总是喜欢)得到你想要的结果就是使用.ToString()方法;

srRegisterDate = Convert.ToDateTime(srRegisterDate).ToString("dddd, MMMM d, yyyy", culture);
Run Code Online (Sandbox Code Playgroud)


Hab*_*bib 5

问题是因为忽略了中的文化值,String.Format而不是将字符串转换为DateTime.

你需要:

srRegisterDate = String.Format(culture, "{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate));
Run Code Online (Sandbox Code Playgroud)

您当前调用String.Formatutalizes 重载String.Format Method (String, Object[])culture传入的参数被视为为占位符传递的简单对象参数。由于没有占位符,您甚至不会看到它被忽略。

如果你想culture使用,String.Format那么你必须使用重载:Format(IFormatProvider, String, Object)String.Format Method (IFormatProvider, String, Object[])