10

是否有DateTimeFormatInfo将星期几转换为两个字符的格式模式?例如,星期二变成 Tu,星期三变成 We。格式字符串需要符合DateTimeFormatInfo for 日期格式。

添加:

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

4

4 回答 4

22

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

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

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

不幸的是,您不能扩展DateTimeFormatInfo,因为它被声明为sealed.

于 2010-06-16T19:25:20.897 回答
5

您需要获取DateTimeFormatInfo您正在使用的文化,然后修改名为AbbreviatedDayNames. 之后,dddTh为你返回。

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 属性
获取或设置资源管理器用于在运行时查找特定于区域性的资源的当前区域性。

于 2010-06-17T08:19:21.433 回答
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);
于 2010-06-16T19:25:50.803 回答
1

要专门使用 DateTimeFormatInfo,您可以

dtfi.GetShortestDayName(DateTime.Now.DayOfWeek);

但是“ddd”是最接近字符串格式的

于 2010-06-16T19:30:34.113 回答