3


1

私は自分のTableフィールドのDateTimeフォーマットを変更する簡単な方法を見つけようと努力しています。

DateTimeであるreleaseDateというフィールドを持つArticleというモデルがあります。

私はそれを変換することによって(視覚的に)それをすることができました

Article.releaseDate.ToString( "dd / MM / yy")

しかし、問題はcreateアクションからこのフォーマットの日付を送信しようとすると、フォーマットが間違っているというエラーが返されることです。

デフォルトの*( "MM / dd / yy")( "dd / MM / yy")*に変更する簡単な方法はありますか?

前もって感謝します

3 Answer


5


以下を含めることで、ページごとにカルチャ情報を変更できます。

<%@ページUICulture = "en" Culture = "en-GB"%>

またはweb.configに追加して全ページにまたがってグローバルに


どちらもDateTimeモデルのバインディングをdd / MM / yyyyに変更するため、変換は不要です。

同等のコードは

CultureInfo.CurrentUICulture.DateTimeFormat = CultureInfo.CurrentCulture.DateTimeFormat = new CultureInfo( "en-GB"、false).DateTimeFormat;


3


うん それは確かに相手です:)

現在のスレッドのCULTUREを変更してみてください。 デフォルトでは、システムのOSを取ります。 しかし、uはそれをオーバーライドできます。

これをチェックしてください…​

Thread.CurrentThread.CurrentCulture = new CultureInfo( "en-GB"); Thread.CurrentThread.CurrentUICulture = new CultureInfo( "en-GB");
http://www.hanselman.com/blog/EnablingEvilOverridingSystemDateTimesDefaultToString.aspx[こちらは良い投稿です]

HTH


0


ここでの問題は、どちらの場合もコンパイラは 2桁/ 2桁/ 2桁 'しか見えないので、 month / day / year`の代わりに `day / month / year`が欲しいことを知る方法がないということです。それは実際にキャストしようとし、そして月に対するあなたの値が `> = 12`であることに気付きます。

これを解決するには、日付を `/`に分割して、引数を "正しい"順序でコンパイラに渡します。

string [] dateParts = input.Split( "/"); int day; int month; int year;

// You could use a boolean variable here to double-check that all casts are successful
Int32.TryParse(dateParts [0]、out day); Int32.TryParse(dateParts [1]、月外); Int32.TryParse(dateParts [2]、年外);

var output = new DateTime(年、月、日);

これを別の関数に入れると、このようにして両方の形式をサポートすることができます。

DateTime releaseDate; try {//入力がデフォルトのフォーマットでない場合は例外をスローしますreleaseDate = new DateTime(input); } catch(InvalidFormatException ex){releaseDate = GetDateTimeFromNonStandardInput(input);}キャッチ{スロー; //あるいは、どんなエラー処理をしてもいいと思います。 }

個人的には、 DateTime`クラスの拡張メソッドとして GetDateTimeFromNonStandardInput() `を書きます。