WPF中的日期时间格式

Kan*_* Lu 2 c# wpf

我想根据环境中的当前文化自动显示日期时间.

例如,如果我DateTime.ToShortDateString()用来转换Datetime"2013年5月4日",它将4/5/2013在en-us和5/4/2013in中en-gb.

但我要展示的是04/05/2013en-us和05/04/2013en-gb.零无法隐藏.

请注意,该软件可能在不同的文化中运行,而不仅仅是在美国和英国.我不想为每种文化设置日期时间格式.

mad*_*dd0 6

鉴于.NET对每种文化格式应该是什么有自己的想法,你可以做的就是决定对现有格式进行"改进".

我要做的是创建一个IValueConverter我将采用当前(或期望)文化的短日期格式:

CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
Run Code Online (Sandbox Code Playgroud)

并用一个替换任何单个d出现dd.

如果您需要几个月有两位数和年是四位长,我会取代单MMM,并确保总有4 y的.

这种方法利用.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;
  }
}
Run Code Online (Sandbox Code Playgroud)