.Net 具有使用 CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern 格式的日期时间的内置 ToShortTimeString() 函数。它为 en-US 返回类似这样的内容:“5:00 pm”。对于 de-DE 等 24 小时文化,它将返回“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);
}
}
关于c# - 使用当前区域性定义的 12 或 24 小时格式从 DateTime 获取一天中的小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3015040/