3

私は文字列をに変換しようとしますdatetimeが、取得するたびに:

文字列が有効な日時として認識されませんでした。

コードは次のとおりです。

string format = "dd/MM/yyyy";

obj.TransDate = DateTime.ParseExact(lbl_TransDate.Text.Split('/')[0] + "/" + lbl_TransDate.Text.Split('/')[1] + "/" + lbl_TransDate.Text.Split('/')[2], format, CultureInfo.InvariantCulture);

解析しようとしている日付をデバッグすると、次のようになります。12/4/2012

4

4 に答える 4

9

必要な形式は

string format = "dd/M/yyyy";

私は物事を理解していませんが、同じものを取得するので、なぜ文字列を連結して分割するのですか?

入力が2012年12月4日の場合、 「/」で分割した後、2012年12月4日を取得し、それらを連結して「2012年12月4日」を取得します。なぜこれ?

また、本当にその分割が必要な場合は、配列に格納できるため、3回分割する必要はありません。

var splits = lbl_TransDate.Text.Split('/');
DateTime.ParseExact(splits[0] + "/" + splits[1] + "/" + splits[2], ...);

入力を信頼しない場合、splits配列はLength = 3でない可能性があり、それ以上の場合は、DateTime.TryParseExactを使用できます。

編集複数の形式でオーバーロードを使用できるため、入力が2012年12月4日または2012年4月12日の場合は、両方の形式を指定できます

var formats = new[] {"dd/M/yyyy","dd/MM/yyyy"};
var date = DateTime.ParseExact("12/4/2012", formats, 
                                        System.Globalization.CultureInfo.InvariantCulture,
                                        System.Globalization.DateTimeStyles.AssumeLocal);
于 2012-04-12T12:02:35.673 に答える
3

私は、単純な問題であるべきことを解決するためにあなたが多くのことをしているように見えるという他の答えに同意します。カルチャ情報の英国の日付形式を使用します。

var convertedDay = DateTime.Parse("12/04/2010", new CultureInfo("en-GB").DateTimeFormat);
于 2012-04-12T12:18:51.817 に答える
1

MM1桁しかない場合を指定します。を1つだけ使用するかM、関数を使用してゼロのままにパッドを付けますPadLeft

次のコードは、両方ddを使用してこれを示し、必要に応じてMMパディングされます

string format = "dd/MM/yyyy";
string mydate = "12/4/2012";
DateTime t = DateTime.ParseExact(mydate.Split('/')[0].PadLeft(2,'0') + "/" + 
                                 mydate.Split('/')[1].PadLeft(2,'0') + "/" + 
                                mydate.Split('/')[2], format, CultureInfo.InvariantCulture);

出力は次のとおりです。

12/04/2012 00:00:00
于 2012-04-12T12:06:38.913 に答える
1

Web設定に次のものを追加してください

<system.web>
<globalization culture="en-AU"/>...

正しい文化の国コードについては、以下を参照してください

http://sharpertutorials.com/list-of-culture-codes/

于 2012-09-11T06:28:20.320 に答える