.Net内置了DateTime的ToShortTimeString()函数,该函数使用CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern格式.它为en-US返回:“下午5:00”.对于24小时文化,如de-DE,它将返回“17:00”.
我想要的只是一个方法,只要返回一小时(所以上面的例子中的“下午5点”和“17”)适用于每一种文化.什么是最好的/最干净的方式来做到这一点?
谢谢!
解决方法
// displays "15" because my current culture is en-GB Console.WriteLine(DateTime.Now.ToHourString()); // displays "3 pm" Console.WriteLine(DateTime.Now.ToHourString(new CultureInfo("en-US"))); // displays "15" Console.WriteLine(DateTime.Now.ToHourString(new CultureInfo("de-DE"))); // ... public static class DateTimeExtensions { public static string ToHourString(this DateTime dt) { return dt.ToHourString(null); } public static string ToHourString(this DateTime dt,IFormatProvider provider) { DateTimeFormatInfo dtfi = DateTimeFormatInfo.GetInstance(provider); string format = Regex.Replace(dtfi.ShortTimePattern,@"[^hHt\s]",""); format = Regex.Replace(format,@"\s+"," ").Trim(); if (format.Length == 0) return ""; if (format.Length == 1) format = '%' + format; return dt.ToString(format,dtfi); } }