是否有DateTimeFormatInfo
将星期几转换为两个字符的格式模式?例如,星期二变成 Tu,星期三变成 We。格式字符串需要符合DateTimeFormatInfo
for 日期格式。
添加:
也许我正在寻找一种解决方案来扩展DateTimeFormatInfo
以包含自定义格式?
是否有DateTimeFormatInfo
将星期几转换为两个字符的格式模式?例如,星期二变成 Tu,星期三变成 We。格式字符串需要符合DateTimeFormatInfo
for 日期格式。
添加:
也许我正在寻找一种解决方案来扩展DateTimeFormatInfo
以包含自定义格式?
您可以获得的关闭是"ddd"
自定义格式说明符- 这会产生三个字母的缩写,因此不完全是您想要的。没有任何内置功能可以完全满足您的需求。
您始终可以使用其中的前两个字符:
DateTime.Now.ToString("ddd").Substring(0,2);
不幸的是,您不能扩展DateTimeFormatInfo
,因为它被声明为sealed
.
您需要获取DateTimeFormatInfo
您正在使用的文化,然后修改名为AbbreviatedDayNames
. 之后,ddd
会Th
为你返回。
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 属性
获取或设置资源管理器用于在运行时查找特定于区域性的资源的当前区域性。
尝试这个
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);
要专门使用 DateTimeFormatInfo,您可以
dtfi.GetShortestDayName(DateTime.Now.DayOfWeek);
但是“ddd”是最接近字符串格式的