13

此代码未本地化:

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; 
    }

知道更好的方法,请分享。谢谢!

4

3 回答 3

29

我想你正在寻找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);
        }
    }    
}
于 2012-06-26T18:53:32.770 回答
3

这些方法将为您提供日期名称列表,默认为指定区域性一周的第一天:

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"));
于 2012-06-26T19:09:09.187 回答
2

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

System.Threading.Threads.CurrentThread.CurrentCulture

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

DateTimeFormatInfo.CurrentInfo.GetDayName(dayOfWeek)

但是,如果您使用 CurrentUICulture/CurrentCulture 范例,仅获取日期名称,CurrentUICulture 更合适。对于居住在美国的人,CurrentCulture 完全有可能设置为 en-US,但对于说/读西班牙语的人,CurrentUICulture 设置为 es-MX 或 es-US。日期格式应该使用文化设置: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);
}
于 2018-01-29T04:07:28.197 回答