获取DayOfWeek值的本地化字符串

时间:2012-06-26 18:50:02

标签: c# .net datetime date localization

此代码未本地化:

Enum.GetNames(typeof(DayOfWeek))

我想要一个返回本地化字符串列表的方法,从一个本地化的任意DayOfWeek开始,我想使用内置资源来实现。到目前为止,我已经提出了下面的代码,但我觉得这应该以一种不像黑客的方式得到支持。

    public List<String> GetLocalizedDayOfWeekValues(DayOfWeek startDay = DayOfWeek.Sunday)
    {
        var days = new List<String>();
        DateTime date = DateTime.Today;

        while (date.DayOfWeek != startDay)
            date.AddDays(1);

        for (int i = 0; i < 7; i++)
            days.Add(date.ToString("dddd"));

         return days; 
    }

了解更好的方法,请分享。谢谢!

3 个答案:

答案 0 :(得分:28)

我认为你正在寻找DateTimeFormatInfo.DayNames。示例代码:

using System;
using System.Globalization;

class Program
{
    public static void Main()
    {
        var french = new CultureInfo("FR-fr");
        var info = french.DateTimeFormat;
        foreach (var dayName in info.DayNames)
        {
            // dimanche, lundi etc
            Console.WriteLine(dayName);
        }
    }    
}

答案 1 :(得分:2)

这些方法会为您提供日期名称列表,默认为指定文化的一周中的第一天:

public List<String> GetLocalizedDayOfWeekValues(CultureInfo culture)
{
    return GetLocalizedDayOfWeekValues(culture, culture.DateTimeFormat.FirstDayOfWeek);
}

public List<String> GetLocalizedDayOfWeekValues(CultureInfo culture, DayOfWeek startDay)
{
    string[] dayNames = culture.DateTimeFormat.DayNames;
    IEnumerable<string> query = dayNames
        .Skip((int) startDay)
        .Concat(
            dayNames.Take((int) startDay)
        );

    return query.ToList();
}

...比较

List<string> dayNames = GetLocalizedDayOfWeekValues(new CultureInfo("fr-fr"));

...到...

List<string> dayNames = GetLocalizedDayOfWeekValues(new CultureInfo("fr-ca"));

答案 2 :(得分:0)

我会把它扔进去。原帖似乎想要当前语言的日期名称。这可能来自文化集:

System.Threading.Threads.CurrentThread.CurrentCulture

此文化的 DateTimeFormatInfo 对象很容易检索,您可以使用GetDayName:

DateTimeFormatInfo.CurrentInfo.GetDayName(dayOfWeek)

但是,如果您使用CurrentUICulture / CurrentCulture范例,仅获取日期名称,则CurrentUICulture更合适。对于生活在美国的人来说,CurrentCulture完全可能被设置为en-US,但是对于说西班牙语的人来说,CurrentUICulture被设置为es-MX或es-US。 dateformat应该使用文化设置:mm / dd / yyyy但是对于日期名称,它应该使用UIculture设置:Lunes,Martes等。

出于这个原因,我建议使用这种技术:

public String getLocalDayName( DayOfWeek dayOfweek) {
    var culture = System.Threading.Thread.CurrentThread.CurrentUICulture;
    var format = culture.DateTimeFormat;
    return format.GetDayName(dayOfweek);
}