目前我正在返回这样的日期:
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语句...我不能用动态代码写这个,所以我有一行代码的格式正确吗?
答案 0 :(得分:1)
如果您可以略微更改您的要求,您可以为所有文化使用标准格式(如“D”)(或其他有意义的standard format):
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
会自动选择正确的格式。
答案 1 :(得分:0)
您可以实现一个简单的文化提供者/帮助器(让它成为扩展方法),将逻辑集中在一个地方
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();