2012-03-04 17 views
0

私のサーバーは米国にあり、クライアントはインドにあります。DateTimeを米国形式で保存し、英国形式で表示します

米国の書式に合格すると英国の日付を返し、その逆も返すことができる関数を作成しようとしました。それは動作しません。

// client culture 
System.Globalization.CultureInfo UKcultureInfo = new System.Globalization.CultureInfo("en-gb"); 
// server culture 
System.Globalization.CultureInfo UScultureInfo = new System.Globalization.CultureInfo("en-us"); 
public DateTime ReturnUKDate(string date) 
{ 
      return DateTime.Parse(date, UKcultureInfo); 
} 

が、私はReturnUKDate(「2012年12月29日」)

を渡すとき、私は、このエラー文字列が有効なDateTimeとして認識されませんして取得します。

+0

どこに日付の値を保存しますか?データベース、XML、またはその他(指定してください)? – code4life

答えて

1

まずはあなたの日付はUTCで保存する必要があります - 現地時刻形式ではありません。もしあなたが(私が推測するにはやむを得ないXMLのためにやむを得ない)ことができるなら、文字列として日付を保存しないでください。 SQL ServerはDateTimeデータ型をサポートしています。 UTCからは、表示目的での任意のローカルに変換することができます。

特定の日付文字列を既知の形式で解析する場合は、ParseExcactまたはTryParseExcactを使用して、正確な書式文字列を渡すことができます。

+0

例を追加してください – Moksha

+0

*常に* UTCで保存するべきではありません。たとえば、毎週午後7時に発生する定期的なイベントを表現したい場合は、その瞬間を見つけるためにタイムゾーンを保存する必要があります。いくつかの任意のUTC値を変換します。 –

+0

@JonSkeet:UTCの時刻からローカルのイベント時刻を取得できませんでした。 – BrokenGlass

0

米国のスタイルの日付を渡してイギリスの文化を指定しているため、エラーとなります。

これは

var dt = DateTime.Parse("12/29/2012", new System.Globalization.CultureInfo("en-us")); 

を動作し、他の回答で指摘したように私はあなたが何をしようとしてわからないんだけど、この

var dt = DateTime.Parse("29/12/2012", new System.Globalization.CultureInfo("en-gb")); 

は正しいん。

関連する問題