これが私の問題です。データベースから取得した日付には「2013年12月31日」が含まれています。この日付に基づいて、形式はmm / dd/yyです。ここで問題となるのは、ユーザーのコンピューターの日付の形式に関係なく、ユーザーは常に日付「2013年12月31日」を、例dd / mm/yyではなくmm/dd/yyとして読み取るようにする方法です。読み取ると、31か月がないため、エラーが含まれています。データベースから受け取った日付に分割方法を試しましたが、ユーザーのコンピューターから独立した形式を確認することができませんでした
3 に答える
日付はデータベースに実際のdate
形式として保存されていますか、それとも文字列として保存されていますか?
DateTime.Parse
デフォルトでは、 は現在のユーザーの現在のシステム日付/時刻形式設定を使用することに注意してください (つまり、英国のユーザーは dd/MM/yyyy ですが、米国のユーザーは MM/dd/yyyy です) 。均一な解析が必要な場合はDateTime.ParseExact
、正確な解析フォーマット文字列を使用して指定します。
覚えておくと便利な経験則の 1 つは、「これまでに を使用しているString.Split
場合は、おそらく何か間違ったことをしている可能性がある」ということです (簡単で汚い設計によるプログラムについては例外を設けますが、Format-string の解析については例外を設けます)。 、正規表現、または有限状態マシンは、よりパフォーマンスが高く (文字列の割り当てが少ない)、壊れにくくなっています。
date
データベースがオブジェクトを として格納している場合、またはdatetime
文字列をまったく使用しない場合は、トピックに戻ります。EF クラスの.GetDateString(int)
メソッドまたは型付きフィールド プロパティを使用します。IDataReader
データベースから同じ形式を読み取るか、画面 (UI) に表示するかは明確ではありません。
SQLサーバーからの場合は、変換の使用を検討して ください<-このリンクをたどってください
データベースからどのように日付を取得しましたか? 日付を文字列として保存しましたか?可能であれば、日付をDateTime
文字列ではなく変数として保持することを検討してください。不可能な場合は、DateTime.TryParse
国際化をサポートし、ユーザーの UI ローカリゼーション設定を理解できる方法を調べてください。