2

環境の現在のカルチャに従って、日時を自動的に表示したいと思います。

たとえば、「2013 年 5 月 4 日」のDateTime.ToShortDateString()を変換するために使用すると、en-us とになります。Datetime4/5/20135/4/2013en-gb

しかし、表示したいのは04/05/2013en-us と05/04/2013en-gb です。ゼロを隠すことはできません。

また、ソフトウェアは米国や英国だけでなく、さまざまな文化で実行される可能性があることに注意してください。カルチャごとに日時形式を設定したくありません。

4

2 に答える 2

0

カルチャ固有の形式は、先行ゼロが存在するかどうかを定義します。カルチャによって指定された日付形式を解析する必要があることを変更するには、先行ゼロ以外の指定子を探し、先行ゼロを含む形式を合成します。

例えば:

static string ShortDateFormat(string culture = null)
{
    CultureInfo ci = CultureInfo.CurrentCulture;
    if (!string.IsNullOrEmpty(culture))
        ci = CultureInfo.GetCultureInfo(culture);

    DateTimeFormatInfo fmtinfo = ci.DateTimeFormat;
    if (string.IsNullOrEmpty(fmtinfo.DateSeparator))
        return fmtinfo.ShortDatePattern;

    string fmt = fmtinfo.ShortDatePattern.Replace(fmtinfo.DateSeparator, "!");
    string[] parts = fmt.Split('!');

    for (int i = 0; i < parts.Length; ++i)
    {
        if (parts[i] == "d")
            parts[i] = "dd";
        else if (parts[i] == "M")
            parts[i] = "MM";
    }

    return string.Join(fmtinfo.DateSeparator, parts);
}

少しやり過ぎかもしれません...複数の文字である日付区切り記号を使用する文化があるかどうかはわかりません:)

その結果をパラメーターとして に渡してDateTime.ToString()、出力を取得します。

于 2013-05-29T06:46:51.387 に答える