在我的脚本中,我收到了标准格式,例如“D”、“f”、“R”或其他格式。根据 MSDN,这是标准日期时间格式。
考虑到用户当前的文化,我想得到这个标准格式的自定义格式。
例如,假设我的用户来自法国 (fr-FR):
"d" = "dd/MM/yyyy"
"D" = "dddd d MMMM yyyy"
"F" = "dddd d MMMM yyyy HH:mm:ss"
在我的脚本中,我收到了标准格式,例如“D”、“f”、“R”或其他格式。根据 MSDN,这是标准日期时间格式。
考虑到用户当前的文化,我想得到这个标准格式的自定义格式。
例如,假设我的用户来自法国 (fr-FR):
"d" = "dd/MM/yyyy"
"D" = "dddd d MMMM yyyy"
"F" = "dddd d MMMM yyyy HH:mm:ss"
您需要char
该格式的版本,但是您可以这样做:
CultureInfo culture = //get your culture
var patterns = culture.DateTimeFormat.GetAllDateTimePatterns(yourFormatChar);
这是一些获取模式的代码:
var c = new CultureInfo("fr-FR");
Console.WriteLine(c.DateTimeFormat.LongDatePattern);
Console.WriteLine(c.DateTimeFormat.ShortDatePattern);
Console.WriteLine(c.DateTimeFormat.FullDateTimePattern);
控制台应用程序的结果如下
dddd d MMMM yyyy
dd/MM/yyyy
dddd d MMMM yyyy HH:mm:ss
DateTimeFormatInfo dtf = CultureInfo.CurrentCulture.DateTimeFormat;
switch (standardFormat)
{
case "d":
return dtf.ShortDatePattern;
case "D":
return dtf.LongDatePattern;
case "F":
return dtf.FullDateTimePattern;
// add other standard formatters
default:
throw new ArgumentException("Say what?", "standardFormat");
}
标准格式化程序文档说明了您需要查找的属性。
DateTimeFormat
使用当前线程(或 UI 线程,以适当者为准) 的各种属性:
"d" = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern
"D" = Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern
"F" = Thread.CurrentThread.CurrentCulture.DateTimeFormat.FullDateTimePattern
一些反射可能会确保您将获得内部使用的相同扩展格式字符串:
string GetRealFormat(string format, DateTimeFormatInfo dtfi)
{
MethodInfo method = Type.GetType("System.DateTimeFormat")
.GetMethod("GetRealFormat",
BindingFlags.Static | BindingFlags.NonPublic);
return method.Invoke(null, new object[] { format, dtfi }) as string;
}
string format = GetRealFormat("d", DateTimeFormatInfo.CurrentInfo) // dd.MM.yyyy