gpt4 book ai didi

c# - WPF 中的日期时间格式

转载 作者:行者123 更新时间:2023-12-03 19:08:17 24 4
gpt4 key购买 nike

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

例如如果我使用 DateTime.ToShortDateString() 转换“May 4 2013”​​的Datetime,它将是 4/5/2013 in -us 和 5/4/2013en-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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com