在C#中,如何使用DateTime格式字符串来控制日期的哪些部分显示,同时不会覆盖CultureInfo?
System.Globalization.CultureInfo cultureInfoUS = new System.Globalization.CultureInfo("en-US", false);
System.Globalization.CultureInfo cultureInfoGerman = new System.Globalization.CultureInfo("de-DE", false);
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfoUS;
DateTime date = DateTime.Parse("03-13-2012 01:30:00 PM");
Console.WriteLine(date.ToString(cultureInfoGerman));
//produces 13.03.2012 13:30:00
Console.WriteLine(date.ToString("MM/dd/yyyy", cultureInfoGerman));
//produces 03.13.2012 but should be 13.03.2012
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfoGerman;
Console.WriteLine(date.ToShortTimeString());
//produces: 13:30
Console.WriteLine(date.ToString("h:mm tt", cultureInfoGerman));
//produces: 1:30 but should be 13:30
Console.WriteLine(date.ToString("h:mm tt", cultureInfoUS));
//produces: 1:30 PM
您可以在上面的代码中看到评论。输出部分由CultureInfo调整,但不完全。
此外,ToShortDateString
和ToShortTimeString
方法不会使用IProvider
,因此必须依赖当前线程的文化信息。这用上面的第一个例子说明。是否期望您应该更改当前文化,请调用ToShortDateString
然后将该主题恢复为原始文化?
答案 0 :(得分:0)
我不理解您的代码中的注释 - 您使用的自定义日期/时间格式说明符的行为完全符合我的预期。你为什么期望“MM / dd / yyyy”把这一天放在第一位?
如果您想要一种基于特定文化所使用的模式的自定义格式,您可以通过查看DateTimeFormatInfo.ShortDatePattern
,DateTimeFormatInfo.ShortTimePattern
等来构建它。例如,如果您想要自定义格式在一周中的某一天,然后是文化特定的短时间,您可以使用:
string format = "dddd " + culture.DateTimeFormat.ShortTimePattern;
Console.WriteLine(DateTime.Now.ToString(format, culture);
是否期望您应该更改当前文化,调用ToShortDateString然后将线程还原回原始文化?
不,如果你想要的不是当前的文化,你应该使用standard date/time format string:
date.ToString("d", culture); // short date
date.ToString("t", culture); // short time