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

时间:2010-06-16 19:22:08

标签: c# .net datetimeformatinfo

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

增加:

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

4 个答案:

答案 0 :(得分:18)

你可以得到的关闭是"ddd" custom format specifier - 这会产生三个字母缩写,所以不完全是你想要的。没有任何东西可以完全满足您的需求。

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

DateTime.Now.ToString("ddd").Substring(0,2);

很遗憾,您无法扩展DateTimeFormatInfo,因为它被声明为sealed

答案 1 :(得分:4)

您需要获取正在使用的文化的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();
    }
}

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

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

System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;




有关CurrentCulture的更多信息:

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

  

Thread.CurrentUICulture   属性
获取或设置   资源使用的当前文化   经理要查找特定文化   运行时的资源。

答案 2 :(得分:1)

试试这个

string s = DateVar.ToString("ddd").SubString(0,2);

如果需要是FormatPattern,请尝试:

var dtFI = new CultureInfo( "en-US", false).DateTimeFormat;
dtFI.DayNames = new[] {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su" };
string s = DateVar.ToString("ddd", dtFI);

答案 3 :(得分:1)

要具体使用DateTimeFormatInfo,您可以

dtfi.GetShortestDayName(DateTime.Now.DayOfWeek);

然而,“ddd”是你得到的最接近字符串格式