2012-02-28 19 views
3

C#関数でDateTimeをフォーマットしようとしていますが、動作させることができません。C#私の間違った結果を与えるDateTimeのフォーマット

私が取得しようとしているフォーマットは、このようなものです:

"28/02/2012" 

私は例えば、日時をフォーマットするさまざまな方法を試してみた:

string formattedDate = DateTime.Today.ToString("dd/MM/yyyy"); 

string formattedDate = String.Format("{0:dd/MM/yyyy}", DateTime.Today); 

これらの両方の例が私を与えていますこの結果:

"28.02.2012" 

私は上記の2つの方法を使用する前に何度も書式を設定しましたが、どうして私が「なぜ」なっているのかわからない。の代わりに "/"。

設定が必要な設定がありますか?

答えて

10

phoogは正しい理由を与えているが、私は間違った回避策をお勧めします。あなたはいつもあなたが(おそらく不変の文化)特定の文化にあったかのように日付/時間をフォーマットしたい場合、あなたはそれを行うことができます。

string formattedDate = DateTime.Today.ToString("dd/MM/yyyy", 
               CultureInfo.InvariantCulture); 

は私が見つけ、このクリーナーの 一部部分を強制的により形式を不変の形にし、他の部分(数)は文化に任せます。たとえば、このことを考慮してください。

using System; 
using System.Globalization; 
using System.Threading; 

class Test 
{ 
    static void Main() 
    { 
     CultureInfo ci = new CultureInfo("ar-SA"); 
     Thread.CurrentThread.CurrentCulture = ci; 
     string formattedDate = DateTime.Today.ToString("dd/MM/yyyy"); 
     Console.WriteLine(formattedDate); 
    } 
} 

今日、版画「1433年6月4日」という - イスラム暦のために適切であるが、おそらくはあなたが期待したものではないです。

+0

ありがとう!これはトリックでした=) – bale3

+0

チャック・ノリスが適しているJon Skeetのジョークを使っている開発者がいることは間違いありません。 –

+0

+1もちろんジョンは正しいです。私の答えはVB 6で私の歴史を裏付けています。不変の文化は.NETにとってははるかに慣用的です。 – phoog

6

日付時刻形式の文字列の/は、文化固有の日付区切り記号のプレースホルダーであるです。 /文字明示的に、あなたはそれをエスケープする必要が指定する:詳細については"dd\\/MM\\/yyyy"または@"dd\/MM\/yyyy"

を参照してくださいthe MSDN page "Custom Date and Time Format Strings"

+1

そしてもちろんのC.Evenhuisのはい@エスケープ文字:) –

+0

を逃れます。それを指摘してくれてありがとう。 – phoog

0

私はこのようにそれをやった:

string formattedDate = (String.Format("{0:dd.MM.yyyy}", DateTime.Today)).Replace(".", @"/"); 
関連する問題