文化フォーマットの問題があるからですか?
はい。ユーザーは、時間の区切り記号がドットであるカルチャに属している必要があります。「:」と「/」は両方とも、カスタムの日付と時刻の形式で、カルチャに依存した方法で解釈されます。
結果の文字列がドットではなくコロンで区切られていることを確認するにはどうすればよいですか?
以下を指定することをお勧めしCultureInfo.InvariantCulture
ます:
string text = dateTime.ToString("MM/dd/yyyy HH:mm:ss.fff",
CultureInfo.InvariantCulture);
または、時刻と日付の区切り記号を引用することもできます。
string text = dateTime.ToString("MM'/'dd'/'yyyy HH':'mm':'ss.fff");
...しかし、これにより、デフォルトのカレンダーシステムがグレゴリオ暦ではないカルチャーでユーザーを実行する場合に、おそらく期待しない「興味深い」結果が得られます。たとえば、次のコードを見てください。
using System;
using System.Globalization;
using System.Threading;
class Test
{
static void Main()
{
DateTime now = DateTime.Now;
CultureInfo culture = new CultureInfo("ar-SA"); // Saudi Arabia
Thread.CurrentThread.CurrentCulture = culture;
Console.WriteLine(now.ToString("yyyy-MM-ddTHH:mm:ss.fff"));
}
}
これにより、(2013年9月18日の)出力が生成されます。
11/12/1434 15:04:31.750
私の推測では、あなたのWebサービスはそれに驚かれることでしょう!
私は実際にだけでなく、インバリアントカルチャを使用しますが、お勧めしたいまた、 ISO-8601日付形式に変更しました:
string text = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
これはよりグローバルに受け入れられている形式です。並べ替えも可能で、月と日の順序がわかりやすくなります。(2013年6月7日は、読者の文化に応じて6月7日または7月6日と解釈されます。)