我正在制作一个小程序,我希望根据cultureinfo明确显示日期和时间,如下所示: 星期日,3月3日2017年7:46:57
但是,我希望可以选择任何国家/地区,并根据其编写日期的方式获取日期输出。以丹麦为例,我想表明: Søndag,3。marts 2017 7:46:57 (< - 晚上会是'19:46:57')
请注意,' 3 '位于月份名称的另一侧。
我可以使用CultureInfo.GetCultures获取所有cultureinfo,没问题,但是当我显示日期时间时,我会使用MyDateTime.ToString(MyCultureInfo);'/ p获得'Sunday 3/12/2017 7:46:57 AM' >
我知道如何提取月份名称,我可以手动构建一个字符串,其中所有这些数据都显示了我想要的文化方式,但我不知道我不知道的文化。如果有人选择'中文'og'阿拉伯语',我就不知道要播放什么。
我在想是否有办法在任何文化的正确位置获取月份名称的完整日期?
答案 0 :(得分:3)
我认为您所寻找的格式并不是所有文化的默认格式。以下代码将以指定区域性的默认Full
格式显示日期。 F
适用于FullDateTimePattern。
var now = DateTime.Now;
var denmark = now.ToString("F", new CultureInfo("da-DK"));
根据该行代码,输出为:
12. marts 2017 03:34:12
所以我从中得到的结论是:丹麦的默认完整日期时间模式如上所述。如果您想要其他格式,请使用下面的代码并根据需要进行调整,但请记住,丹麦的人可能会发现这种模式很奇怪,因为它们可能不习惯:
var denmarkCustomized = now.ToString("dddd, MMMM dd, yyyy h:mm:ss tt"
, new CultureInfo("da-DK"));
答案 1 :(得分:0)
此非自定义代码段可让您关闭。
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("da-DK");
DateTime dt = DateTime.Now;
Console.WriteLine($"{dt.ToLongDateString()} {dt.ToLongTimeString()}");
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine($"{dt.ToLongDateString()} {dt.ToLongTimeString()}");
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("ar-AE");
Console.WriteLine($"{dt.ToLongDateString()} {dt.ToLongTimeString()}");
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("zh-CN");
Console.WriteLine($"{dt.ToLongDateString()} {dt.ToLongTimeString()}");
输出:
12. marts 2017 20:36:38
Sunday, March 12, 2017 8:36:38 PM
12 مارس, 2017 08:36:38 م
2017年3月12日 20:36:38
但是,要获取区域设置的自定义输出,例如在丹麦语出现的那一天,你必须编写特殊情况。
答案 2 :(得分:0)
在FullDateTimePattern
中,有100种文化并不包括工作日。您可以使用this之类的简短程序查看它们:
var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);
foreach (var culture in cultures.OrderBy(x => x.EnglishName))
{
if (!culture.DateTimeFormat.FullDateTimePattern.Contains("dddd"))
{
Console.WriteLine("{0} ({1}): {2}", culture.EnglishName, culture.Name, culture.DateTimeFormat.FullDateTimePattern);
}
}
许多欧洲或欧洲后裔文化都不包括它(我看到克罗地亚语(克罗地亚)(hr-HR),丹麦语(丹麦)(da-DK)< / em>,英语(英国)(en-GB),法语(加拿大)(fr-CA),瑞典语(瑞典)(sv-SE )),再加上我看到日本人,俄罗斯人,中国人......这个世界是一个很大的地方,在很多地方,工作日并不是日期的一部分。您有两种选择:接受它,或者对于您不喜欢日期模式的任何文化,创建包含您想要的任何内容的您的 FullDateTimePattern
。
例如你可以:
public static CultureInfo DanishCultureInfo = InitCultureInfoWithWeek("da-DK");
private static CultureInfo InitCultureInfoWithWeek(string name)
{
var ci = CultureInfo.GetCultureInfo(name);
ci = (CultureInfo)ci.Clone();
ci.DateTimeFormat.FullDateTimePattern = "dddd " + ci.DateTimeFormat.FullDateTimePattern;
ci = CultureInfo.ReadOnly(ci);
return ci;
}
public static CultureInfo GetCultureForPrinting(string name)
{
var ci = CultureInfo.GetCultureInfo(name);
if (string.Equals(name, "da-DK", StringComparison.InvariantCultureIgnoreCase))
{
return DanishCultureInfo;
}
else
{
return CultureInfo.GetCultureInfo(name);
}
}
然后,如果您想使用文化来打印某些内容,而不是使用CultureInfo.GetCultureInfo()
,请使用GetCultureForPrinting()
答案 3 :(得分:0)
谢谢大家!您的意见引导我找到这个解决方案:
public string fn_date(DateTime par_datetime, CultureInfo par_cultureinfo)
{
string st_day = par_datetime.ToString("dddd", par_cultureinfo);
string st_date = par_datetime.ToString("T", par_cultureinfo);
if (st_date.ToUpper().IndexOf(st_day.ToUpper()) == -1) st_date = st_day + ", " + st_date;
return st_date;
}
我知道这一天的名字不是标准的,但我之所以需要这个,是因为我为那些难以跟踪的老人和/或痴呆症的人制作应用程序这是什么日子和月份。 最初我是为我的父亲做的,他有这个确切的问题。我抓住了一台旧笔记本电脑,并在屏幕底部用大字写清楚了日期和时间。屏幕的其余部分显示了他孙子的各种照片。这是一个很大的帮助。
所以我想改进它并使其国际化,所以每个人都可以从我的网站下载并在需要时使用它。
再次感谢!