是否有DateTimeFormatInfo
格式模式将一周中的某一天转换为两个字符?例如星期二变成涂,星期三变成我们。格式字符串需要符合DateTimeFormatInfo
的日期格式。
增加:
也许我正在寻找扩展DateTimeFormatInfo
以包含自定义格式的解决方案?
答案 0 :(得分:18)
你可以得到的关闭是"ddd"
custom format specifier - 这会产生三个字母缩写,所以不完全是你想要的。没有任何东西可以完全满足您的需求。
您始终可以使用前两个字符:
DateTime.Now.ToString("ddd").Substring(0,2);
很遗憾,您无法扩展DateTimeFormatInfo
,因为它被声明为sealed
。
答案 1 :(得分:4)
您需要获取正在使用的文化的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 属性
获取或设置 资源使用的当前文化 经理要查找特定文化 运行时的资源。
答案 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”是你得到的最接近字符串格式