我想根据环境中的当前文化自动显示日期时间.
例如,如果我DateTime.ToShortDateString()用来转换Datetime"2013年5月4日",它将4/5/2013在en-us和5/4/2013in中en-gb.
但我要展示的是04/05/2013en-us和05/04/2013en-gb.零无法隐藏.
请注意,该软件可能在不同的文化中运行,而不仅仅是在美国和英国.我不想为每种文化设置日期时间格式.
鉴于.NET对每种文化格式应该是什么有自己的想法,你可以做的就是决定对现有格式进行"改进".
我要做的是创建一个IValueConverter我将采用当前(或期望)文化的短日期格式:
CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern
Run Code Online (Sandbox Code Playgroud)
并用一个替换任何单个d出现dd.
如果您需要几个月有两位数和年是四位长,我会取代单M用MM,并确保总有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)
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |