2017-03-09 18 views
-2

C#.NETのExcelデータベースからSQLデータベーステーブルに日付値( "24/11/2016")をエクスポートしています。私は文字列からDatetimeに日付の値を解析するために私の関数に次のコードを使用しています。しかし、それは動作していません。私はそれをデバッグしようとしましたが、その行になると終了します。誰が問題なのか知っている。C#の文字列からDateTimeまでの日付解析。

var date = row["Date"].ToString(); 

DateTime dates;  
string format = "MM-dd-yyyy"; 

if (!DateTime.TryParseExact(date, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out dates)) 
{ 
    continue; 
}       
else 
{ 
    dates = DateTime.Parse(date); //terminating at this line 
} 
+1

なぜ2つの構文解析コマンドがあるのですか? TryParseが失敗した場合、Parseはなぜ成功すると思いますか? – dana

+0

私を訂正してくれてありがとう。しかし実際の問題は、文字列値をDatetimeに解析することです。 –

答えて

6

あなたの形式は、日付として24/11/2016を持っているとして、あなたは、このMSDNの記事

Custom Date and Time Format Strings

変更

string format = "MM-dd-yyyy"; 

内の文字列のフォーマットについての詳細を学ぶことができdd-MM-yyyyする必要があります

string format = "dd-MM-yyyy"; 
実際に、我々は「DD-MM-YYYのように参照プレゼンテーション形式ではありません

のDateTimeは標準フォーマットのSQLサーバーに保存されているSQLサーバーでフォーマットされた日付を保存する - OPのコメントをもとに

編集 "この記事Solving the Datetime Mysteryは、内部SQLサーバーの形式について説明しています。 Solving the Datetime Mystery

から

抜粋それでは、どのようにSQL Serverが内部的に日付を格納しますか?これは8バイトを使用して にdatetime値を格納します。これは、日付の最初の4つと、 の2番目の時刻です。 SQL Serverは、4バイトの両方のセットを整数として解釈できます。 日付部分には、1900年1月1日の基準日の前後に、 日の値が格納されます。この 記憶域プロトコルのため、SQL Serverは1900年1月1日の日付を仮定します。 私の最初の例では日付を指定しませんでした。 SQL Serverの内部 が負の数1月1日 よりも以前の日付を表す0の値が格納されている、1900

SQL Serverが クロックの数は、真夜中の後チックような時間のために第2の整数を格納します。秒には300ティックが含まれているため、 のティックは3.3ミリ秒に相当します。サブストリング関数を使用して4バイトの各セットを抽出すると、日時値をバイナリ(8)値に変換し、 を使用して、日と クロックティックの値を確認できます。図3のコード は、4バイトの各セットを整数に変換します。

+0

upvotersへの感謝:質問でコードとコードが同じであることを見てみましょう 'string format =" dd-MM-yyyy "'、@Adil:これは編集後には完璧です.. lol –

+0

ありがとうそのフォーマットについて私に訂正してください。しかし、問題はDatetimeに文字列値を解析することです。それが日時に変換されない理由私は "24/11/2016"のようなExcelファイルに日付値を持っており、 "2016-11-24"のようなSQLデータベーステーブルに格納しなければなりません。 –

+0

@ un-lucky、私はすでにdd-MM-yyyyを提案しています。とにかくあいまいさを解消させてくれてありがとう! – Adil

0

は最終的に私は次のコード使用してそれをやった:= "DD/MM/YY"

文字列形式を、

場合(日付アウトDateTime.TryParseExact(日付、フォーマット、CultureInfo.InvariantCulture、DateTimeStyles.None、)!)

{続けます。 }

{日付= DateTime.ParseExact(日付、フォーマット、のCultureInfo。InvariantCulture); }

文字列datetime = dates.ToString( "yyyy-MM-dd");

ありがとうございます。

関連する問題