我目前正在使用.NET的DateTime
ToLongDateString()
方法来解析日期字符串。
对于某些文化,这很好用:
US: Wednesday, May 16, 2001
但是对于其他一些文化,省略了名称(例如荷兰语,匈牙利语和冰岛文化)。
NL: 16 mei 2001
这些文化的DayNames数组包含一周中每一天的专有名称,但由于某种原因,它们不用于长日期字符串。
我尝试使用DateTimeFormat.DayNames [i] + "D"
格式化解决方案,但它在这里不起作用,因为它会导致已经显示日期名称的文化的双日名称。
US: Wednesday Wednesday, May 16, 2001
NL: woensdag 16 mei 2001
有没有办法让默认情况下省略它的文化显示日期名称?
答案 0 :(得分:3)
多数民众赞成。
.NET会做它应该做的事情,如果您查看一下Windows PC的区域设置,您可以更改文化并查看日期(长)字段中显示的内容,您将看到以下内容:
代表荷兰语: d。 MMMM YYYY
匈牙利语: YYYY。 MMMM d。
对于冰岛语: d。 MMMM YYYY
如果您真的想要为所有这些设置,或者强制使用
强制使用某种格式布局,则必须手动添加它DateTime.Now.ToString("dddd, dd MM YYYY");
查看此页面,了解在Windows 7 PC上找到区域设置的位置: http://windows.microsoft.com/en-us/windows7/change-the-country-or-region-setting
答案 1 :(得分:2)
许多文化都有多个长日期模式,您可以从中选择第一个包含星期几模式的模式:
static void Main(string[] args)
{
foreach (var cultureInfo in System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures))
{
string longDateWithDayOfWeek = null;
foreach (var pattern in cultureInfo.DateTimeFormat.GetAllDateTimePatterns('D'))
{
if (pattern.Contains("ddd"))
{
longDateWithDayOfWeek = pattern;
break;
}
}
bool isFallbackRequired = string.IsNullOrEmpty(longDateWithDayOfWeek);
if (isFallbackRequired)
{
longDateWithDayOfWeek = "dddd, " + cultureInfo.DateTimeFormat.LongDatePattern;
}
System.Console.WriteLine("{0} - {1} {2}", cultureInfo.Name, longDateWithDayOfWeek, (isFallbackRequired) ? " (generated)" : string.Empty);
}
}
荷兰语和冰岛语都是这样支持的,而匈牙利语需要更多的研究才能正确覆盖。
答案 2 :(得分:1)
如果你想到你在问什么 - 很明显你需要检查,然后自己添加。
你基本上是在说“如果文化X不包含日期名称,请添加它”,转换为:
var date = DateTime.Now;
if(!date.ToLongDateString().Contains(date.ToString("dddd"))
//Add it
答案 3 :(得分:0)
DateTime dt = new DateTime(2001, 5, 16);
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("nl-NL");
Debug.WriteLine(dt.ToLongDateString());
// output: woensdag 16 mei 2001
我认为其他文化可能包含不包含星期名称的格式,但您提供的的格式 - 至少在我的机器上。
有一点需要注意,如果您要自己检查并添加它,您确定它应该始终位于字符串的前面吗?在许多文化中它是,但也许并非所有文化都以这种方式运作。那么,隔板怎么样?这里只使用一个空格,但许多使用逗号和空格。其他人可以使用不同的东西。