0

月が 1 桁、日が 1 桁、年が 2 桁の日付文字列が必要です (これは、他のほとんどの場所M/d/yyでは米国にあります)。d/M/yyまた、ロケール間で動作する必要があるため、月/日の順序と区切り記号を自動的に処理する必要があります。これに最も近いのは、を介して呼び出されたときdに返される形式です。MM/dd/yyyydate.ToString("d")

これはロケール全体で機能する必要があるため、これを試してみました。

string format = culture.DateTimeFormat.ShortDatePattern
                                   .Replace("yyyy", "yy")
                                   .Replace("dd", "d")
                                   .Replace("MM", "M");

return date.ToString(format);

Usingculture.DateTimeFormat.ShortDatePatternは、日付形式に使用される日付形式を提供しdます。このプロパティを使用すると、日/月/年の順序と日付の区切りが処理されます。

これを行うより良い方法はありますか?

4

1 に答える 1

1

絶対に正確な形式が必要な場合は、M/d/yyそれを使用してください:

return date.ToString("M/d/yy", culture);

ただし、これは必ずしもカルチャに適した文字列ではありません。たとえば、より多くのd/M/yy形式を期待する英国の誰にとっても、それはかなり異質です-月の前に日。

MM/dd/yyyy形式は使用時に得られるものである可能性がありますdate.ToString("d")が、それは英国で得られるものではないことに注意してください.

基本的に、ローカリゼーションを吹き飛ばしている場合はフォーマットを確定するかどうか、または「通常の」カルチャ固有の短い日付文字列フォーマットを使用するかどうかを決定する必要がありますdate.ToString("d", culture)

「短い日付形式ですが、4桁の年は絶対に使用しないでください」など、途中で行こうとしているように思えます。それ機能しますが(メソッドにも渡すようにしてくださいculture) 、ToString文化の短い日付パターンはdd、最初に etc を使用します。たとえば、通常の短い日付形式がddd dd MMM yyyy最終的にdd d MM yy.

基本的に、文化から「さらに短い日付形式」へのマッピングを実際に取得していない限り、このようにそれをごまかすことはお勧めしません。

編集:これは、出力を確認する必要がある短いプログラムです。基本的に、元の形式と変更された形式を印刷します。

using System;
using System.Globalization;

class Program
{
    public static void Main()
    {
        foreach (var culture in 
                        CultureInfo.GetCultures(CultureTypes.SpecificCultures))
        {
            string original = culture.DateTimeFormat.ShortDatePattern;
            string modified = original.Replace("yyyy", "yy")
                                      .Replace("dd", "d")
                                      .Replace("MM", "M");
            Console.WriteLine("{0,11}: {1,12} => {2,-9}",
                              culture, original, modified);
        }
    }
}

私のマシンでは、リストをすばやくスキャンすると、実際には大丈夫だと思います。何も使用していdddないようMMMで、元の形式ではありません。しかし、それが今後も続く保証はありません...

于 2012-09-28T22:24:08.857 に答える