从标准格式获取自定义日期时间格式

时间:2013-08-06 19:56:25

标签: c# datetime datetime-format

在我的脚本中,我收到了标准格式,如“D”,“f”,“R”或其他格式。根据MSDN,这是标准的日期时间格式。

考虑到用户的当前文化,我想获得这种标准格式的自定义格式。

示例,假设我的用户来自法国(fr-FR):

“d”=“dd / MM / yyyy”

“D”=“dddd d MMMM yyyy”

“F”=“dddd d MMMM yyyy HH:mm:ss”

5 个答案:

答案 0 :(得分:7)

您需要该格式的char版本,但您可以这样做:

CultureInfo culture = //get your culture
var patterns = culture.DateTimeFormat.GetAllDateTimePatterns(yourFormatChar);

答案 1 :(得分:2)

这里有一些代码可以获得模式:

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

答案 2 :(得分:2)

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");
}

standard formatter documentation说明您需要查找哪些属性。

答案 3 :(得分:2)

使用当前线程的DateTimeFormat的各种属性(或UI线程,取决于哪个):

"d" = Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern 

"D" = Thread.CurrentThread.CurrentCulture.DateTimeFormat.LongDatePattern 

"F" = Thread.CurrentThread.CurrentCulture.DateTimeFormat.FullDateTimePattern

答案 4 :(得分:1)

某些反射可能会确保您获得内部使用的相同扩展格式字符串:

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