将 datetime 解析为具有英语文化的月日时,仍将其解析为土耳其语
When parsing datetime into month day with English culture, it is still parsed in Turkish language
这是代码。我仍然得到不正确的结果
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);
结果是Cumartesi, Temmuz 25, 2009
应该是Saturday, July 25, 2009
我该如何解决这个错误?
C#.net v4.5.2
Convert.ToDateTime(srRegisterDate)
仍然使用你的CurrentCulture
which looks like tr-TR
based on day and month names. Cumartesi - Temmuz
在 String.Format
中,您的文化将被忽略,因为您将它用作第三个参数作为参数,但您从未使用过它。
您的代码调用了 Format(string format, object arg0, object arg1)
重载。但是你从不使用arg1
。这种超载并不认为这是一种文化。它认为您要格式化的是 另一个 参数。
这个 String.Format
有一个重载,将 IFormatProvider
作为 第一个 参数。
Format(IFormatProvider, String, Object)
Format(IFormatProvider, String, Object[]
)
Format(IFormatProvider, String, Object, Object
)
Format(IFormatProvider, String, Object, Object, Object)
例如;
srRegisterDate = String.Format(culture, "{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate));
但获得所需结果的最常用方法(我总是喜欢)是使用 .ToString()
方法,例如;
srRegisterDate = Convert.ToDateTime(srRegisterDate).ToString("dddd, MMMM d, yyyy", culture);
问题是因为 忽略了 String.Format
中的文化价值,而不是因为将字符串转换为 DateTime
。
你需要:
srRegisterDate = String.Format(culture, "{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate));
您当前对 String.Format
的调用实现了重载 String.Format Method (String, Object[])
并且传入的 culture
参数被视为为占位符传递的简单对象参数。由于没有占位符,您甚至不会看到它被忽略。
如果你想在 String.Format
中使用 culture
那么你必须使用重载:Format(IFormatProvider, String, Object)
或 String.Format Method (IFormatProvider, String, Object[])
这个有效
DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat;
DateTimeFormatInfo trDtfi = new CultureInfo("tr-TR", false).DateTimeFormat;
string result = String.Format("{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate, trDtfi).ToString(usDtfi));
原创
25.07.2009 00:00:00
变身
2009 年 7 月 25 日 12:00:00 上午
编辑
比要求少一分
string test = String.Format("{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(Convert.ToDateTime(srRegisterDate, trDtfi).ToString(usDtfi)));
2009 年 7 月 25 日星期六
这是代码。我仍然得到不正确的结果
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);
结果是Cumartesi, Temmuz 25, 2009
应该是Saturday, July 25, 2009
我该如何解决这个错误?
C#.net v4.5.2
Convert.ToDateTime(srRegisterDate)
仍然使用你的CurrentCulture
which looks like tr-TR
based on day and month names. Cumartesi - Temmuz
在 String.Format
中,您的文化将被忽略,因为您将它用作第三个参数作为参数,但您从未使用过它。
您的代码调用了 Format(string format, object arg0, object arg1)
重载。但是你从不使用arg1
。这种超载并不认为这是一种文化。它认为您要格式化的是 另一个 参数。
这个 String.Format
有一个重载,将 IFormatProvider
作为 第一个 参数。
Format(IFormatProvider, String, Object)
Format(IFormatProvider, String, Object[]
)Format(IFormatProvider, String, Object, Object
)Format(IFormatProvider, String, Object, Object, Object)
例如;
srRegisterDate = String.Format(culture, "{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate));
但获得所需结果的最常用方法(我总是喜欢)是使用 .ToString()
方法,例如;
srRegisterDate = Convert.ToDateTime(srRegisterDate).ToString("dddd, MMMM d, yyyy", culture);
问题是因为 忽略了 String.Format
中的文化价值,而不是因为将字符串转换为 DateTime
。
你需要:
srRegisterDate = String.Format(culture, "{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate));
您当前对 String.Format
的调用实现了重载 String.Format Method (String, Object[])
并且传入的 culture
参数被视为为占位符传递的简单对象参数。由于没有占位符,您甚至不会看到它被忽略。
如果你想在 String.Format
中使用 culture
那么你必须使用重载:Format(IFormatProvider, String, Object)
或 String.Format Method (IFormatProvider, String, Object[])
这个有效
DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat;
DateTimeFormatInfo trDtfi = new CultureInfo("tr-TR", false).DateTimeFormat;
string result = String.Format("{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate, trDtfi).ToString(usDtfi));
原创
25.07.2009 00:00:00
变身
2009 年 7 月 25 日 12:00:00 上午
编辑
比要求少一分
string test = String.Format("{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(Convert.ToDateTime(srRegisterDate, trDtfi).ToString(usDtfi)));
2009 年 7 月 25 日星期六