私は小さな問題に直面していますが、多くのことを試した後、ここではうまくいきません。.ページにテキストボックスがあり、日付を入力していて、datetimeオブジェクトにその日付が必要です。
exの場合:入力された日付:2010年1月2日(dd/MM/yyyy)は、日付時刻オブジェクトでアクセスしているときに同じ形式である必要がありますが、(2/11/2011に変更されています):MM/dd/yyyy形式)。
私がここで意味をなすことを願っています私が望むすべてはこのようなものです.....
DateTime dt = convert.ToDateTime(txtDate.Text);
dtは(2010年2月11日ではなく2010年1月1日)
@oded次のコードを使用した後
DateTime sDate, eDate = new DateTime();
//使用する日付を変更します。 DateTime.TryParseExact(txtFrom.Text、 "dd/MM/yyyy"、CultureInfo.InvariantCulture、DateTimeStyles.None、out sDate);
DateTime.TryParseExact(txtFrom.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out eDate);
私がedateとsdateで取得しているのは、2011年3月11日であるはずの1/1/0001 12:00:00 AMです。
編集:この値:「11/2/2010」は「dd/MM/yyyy」の形式と一致しません。 「d/M/yyyy」の形式に一致します。「dd/MM/yyyy」の場合は「11/02/2010」になります。
そのため、TryParseExact
は失敗します。適切なフォーマットパターンを選択する必要があります。
DateTime
値には形式がありません。日付と時刻を表すだけです(ISOカレンダーでは、場合によっては異なるタイムゾーンで表示されますが、それは別の問題です)。 int
のようなものです。「10進整数」や「16進整数」を表すものではなく、特定の範囲内の整数にすぎません。数値を10進数または16進数としてフォーマットできますが、本質的にフォーマットはありません。
テキストボックスを変換するときの形式を指定するには、ParseExact
で解析する必要があるようですfromテキストボックス、またはおそらく TryParseExact
:
// This is assuming you're absolutely sure of the format used. This is *not*
// necessarily the user's preferred format. You should think about where your
// data is coming from.
DateTime date;
if (DateTime.TryParseExact(text, "dd/MM/yyyy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out date))
{
// Okay, successful parse. We now have the date. Use it, avoiding formatting
// it back to a string for as long as possible.
}
exceptを使用してすべての目的でその値をDateTime
として保持し、それをユーザーに返す必要があります。この時点で、彼らの文化的背景。
特に、データベースに値を格納している場合は、それをテキストに変換してSQLステートメントに含めることはできません必要があります-これは問題を引き起こしています。代わりに、パラメーター化されたSQLステートメントを使用し、それをパラメーター値として、DateTime
として設定します。
DateTime
は日付を特定の形式で格納しません-内部表現を使用します(正確には問題ありません)。
文字列をDateTime
に解析した後、固有の形式はありません。値をoutputする場合にのみフォーマットがあります。デバッガに表示されるのは、システム設定を使用した文字列への変換です。
DateTime
をフォーマットする場合は、ToString
をフォーマット文字列とともに使用します。
dt.ToString("dd/MM/yyyy");
逆も当てはまります。文字列を明確に解析する必要がある場合は、ParseExact
またはTryParseExact
(DateTime
の両方の静的メンバー)を使用します。
DateTime dt;
if(DateTime.TryParseExact(txtDate.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out td))
{
// Valid date used in `txtDate.Text`, use dt now.
}
日付を解析するときに月/日のエラーを回避するには、ToDateTime
よりも DateTime.ParseまたはDateTime.ParseExact を使用することをお勧めします。