我想根据环境中的当前文化自动显示日期时间。
例如
如果我使用 DateTime.ToShortDateString()
转换“May 4 2013”的Datetime
,它将是 4/5/2013
in -us 和 5/4/2013
在 en-gb
中。
但是我想显示的是 en-us 中的 04/05/2013
和 en-gb 中的 05/04/2013
。零无法隐藏。
请注意,该软件可能在不同的文化中运行,而不仅仅是在美国和英国。我不想为每种文化设置日期时间格式。
最佳答案
鉴于 .NET 对每种文化的格式应该有自己的想法,除了决定“改进”现有格式之外,您无能为力。
我要做的是创建一个 IValueConverter
,我将在其中采用当前(或所需)文化的短日期格式:
CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
并将所有出现的单个 d
替换为 dd
。
如果您要求月份为两位数,年份为四位数,我会将单个 M
替换为 MM
并确保始终有四个 你
的。
这种方法利用了 .NET 认为在每种文化中正确的日期-月份-年份顺序,并使用了 .NET 认为正确的分隔符。
转换器可能看起来像这样:
class ShortDateConverter : IValueConverter
{
public object Convert(object data, Type type, object parameter, CultureInfo culture)
{
string format = PrepareFormat(culture.DateTimeFormat.ShortDatePattern);
DateTime date = (DateTime)data;
return date.ToString(format, culture);
}
public object ConvertBack(object data, Type type, object parameter, CultureInfo culture)
{
return DateTime.ParseExact((string)data, PrepareFormat(culture.DateTimeFormat.ShortDatePattern), culture);
}
private string PrepareFormat(string format)
{
if (!format.Contains("dd"))
format = format.Replace("d", "dd");
if (!format.Contains("MM"))
format = format.Replace("M", "MM");
if (!format.Contains("yyyy"))
format = format.Replace("yy", "yyyy");
return format;
}
}
关于c# - WPF 中的日期时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16806857/