带有动态文化信息的返回日期
本文关键字:返回 日期 信息 文化 动态 | 更新日期: 2023-09-27 18:26:39
目前我返回的日期如下:
string returnValue = DateTime.Now.ToString("d MMMMMMMMMMMMMM yyyy");
问题是,如果运行该程序的人来自美国,我需要像这样返回:2014年10月15日
当用户运行程序时,我可以用以下代码更改cultureinfo(这是有效的):
Thread.CurrentThread.CurrentCulture = new CultureInfo(SelectedLanguage.LanguageCode);
我可以使用
string returnValue = DateTime.Now.ToString("d MMMMMMMMMMMMMM yyyy");
if(Thread.CurrentThread.CurrentCulture == "en-US") {
returnValue = DateTime.Now.ToString("MMMMMMMMMMMMMM d, yyyy");
}
但如果还有另一个区域,我需要添加另一个if语句。。。我不能用动态代码写这个吗,所以我用一行代码就有了正确的格式?
如果您可以稍微更改您的需求,您可以对所有文化使用类似"D"的标准格式(或另一种有意义的标准格式):
DateTime.Now.ToString("D"); // i.e., Monday, June 15, 2009
否则,您可以使用Dictionary<CultureInfo, string>
创建区域性/格式对的查找,然后使用它来代替if/else长链:
var formatLookup = new Dictionary<CultureInfo, string>();
formatLookup.Add(CultureInfo.GetCultureInfo("en-us"), "MMMMMMMMMMMMMM d, yyyy");
然后你可以这样使用它:
string format;
if (!formatLookup.TryGetValue(Thread.CurrentThread.CurrentCulture, out format))
{
// This would be the default format if none is found for the current culture:
format = "d MMMMMMMMMMMMMM yyyy";
}
string returnValue = DateTime.Now.ToString(format);
如果您使用资源文件来本地化您的应用程序,则会存在另一个选项。如果是这种情况,您可以将每种语言的格式存储在资源字符串中。假设存在当前区域性的本地化文件,ResourceManager
将自动选择正确的格式。
您可以实现一个简单的区域性提供程序/帮助程序(让它成为扩展方法),将逻辑集中在一个地方
public static class CultureHelper
{
public static string ToCultureSpecificString(this DateTime @this)
{
// do formatting as you like, check current country, user nationality, etc.
// var result = @this.ToString("dd/MM/yyyy");
return result;
}
}
并将其用于所有类似的DateTime
string returnValue = DateTime.Now.ToCultureSpecificString();