DateTimeFormatInfo星期几的字符串格式.星期四变成了Th

Ton*_*ich 7 .net c# datetimeformatinfo

是否有DateTimeFormatInfo格式模式将一周中的某一天转换为两个字符?例如星期二变成涂,星期三变成我们.格式字符串需要符合DateTimeFormatInfo for日期格式.

加成:

也许我正在寻找扩展DateTimeFormatInfo到包含自定义格式的解决方案?

Ode*_*ded 21

您可以获得的关闭是"ddd" 自定义格式说明符 - 这会生成三个字母缩写,因此不完全是您想要的.内置任何内容都不能满足您的需求.

您始终可以使用前两个字符:

DateTime.Now.ToString("ddd").Substring(0,2);
Run Code Online (Sandbox Code Playgroud)

不幸的是,你无法扩展,DateTimeFormatInfo因为它被声明为sealed.


cod*_*ife 5

您需要获取DateTimeFormatInfo正在使用的文化的 ,然后修改名为 的字符串数组AbbreviatedDayNames。之后,ddd会回来Th找你。

http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.abbreviateddaynames(VS.71).aspx

DateTimeFormatInfo.AbbreviatedDayNames
获取或设置 String 类型的一维数组,其中包含一周中特定于区域性的缩写名称。

以下是如何执行此操作的示例:

class Program
{
    static void Main()
    {
        var dtInfo = new System.Globalization.DateTimeFormatInfo();            
        Console.WriteLine("Old array of abbreviated dates:");
        var dt = DateTime.Today;
        for (int i = 0; i < 7; i++)
        {
            Console.WriteLine(dt.AddDays(i).ToString("ddd", dtInfo));
        }

        // change the short weekday names array
        var newWeekDays = 
            new string[] { "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" };
        dtInfo.AbbreviatedDayNames = newWeekDays;

        Console.WriteLine("New array of abbreviated dates:");
        for (int i = 0; i < 7; i++)
        {
            Console.WriteLine(dt.AddDays(i).ToString("ddd", dtInfo));
        }

        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

还有一点要注意:当然,如果您被限制提供IFormatProvider,那么您可以覆盖当前线程的CultureInfo,例如:

CultureInfo customCulture = CultureInfo.CreateSpecificCulture("en-US");
// ... set up the DateTimeFormatInfo, etc...

System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
Run Code Online (Sandbox Code Playgroud)




更多关于当代文化:

http://msdn.microsoft.com/en-us/library/system.threading.thread.currentuiculture.aspx

Thread.CurrentUICulture 属性
获取或设置资源管理器在运行时用于查找特定于文化的资源的当前区域性。