web-dev-qa-db-ja.com

日付をMM / dd / YYYY形式からdd / MM / YYYY形式に変換します

私は小さな問題に直面していますが、多くのことを試した後、ここではうまくいきません。.ページにテキストボックスがあり、日付を入力していて、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です。

8
ankur

編集:この値:「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として設定します。

11
Jon Skeet

DateTimeは日付を特定の形式で格納しません-内部表現を使用します(正確には問題ありません)。

文字列をDateTimeに解析した後、固有の形式はありません。値をoutputする場合にのみフォーマットがあります。デバッガに表示されるのは、システム設定を使用した文字列への変換です。

DateTimeをフォーマットする場合は、ToStringをフォーマット文字列とともに使用します。

dt.ToString("dd/MM/yyyy");

逆も当てはまります。文字列を明確に解析する必要がある場合は、ParseExactまたはTryParseExactDateTimeの両方の静的メンバー)を使用します。

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.
}

custom および standard の日付と時刻のフォーマット文字列についてお読みください。

11
Oded

日付を解析するときに月/日のエラーを回避するには、ToDateTimeよりも DateTime.ParseまたはDateTime.ParseExact を使用することをお勧めします。

このスレッド および この記事 が指摘したとおり。

2
JMax