行からC#でDateTime
値を取得するにはどうすればよいですか。現在のコードでエラーが発生しているため、どんな助けでもありがたいです。データは進行状況データベースから取得されます。
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString();
statCode = r["STAT"].ToString();
DateTime firstIssueDate = (DateTime)(r["FISS"]);
DateTime endIssueDate = (DateTime)(r["EISS"]);
if(endIssueDate > DateTime.Now)
{ /*do some thing...*/}
else {/*user invalid...*/}
}
日付変換とパースを取得するには2つの方法があります。すべてのヘルプに感謝します
最終作業コードスニペット:
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString(),statCode = r["STAT"].ToString();
// r.<DateTime?>("FISS");
if (r["FISS"] != DBNull.Value)
{
DateTime firstIssueDate = Convert.ToDateTime(r["FISS"]);
if (r["EISS"] != DBNull.Value)
{
DateTime endIssueDate = DateTime.Parse(r["EISS"].ToString());
if (endIssueDate > DateTime.Now)
{
これは単なる推測ですが、データベース内の対応する型がDateTimeである場合、列がnull可能かどうかを確認できますか?
もしそうなら、あなたはチェックをしたいかもしれませんr["column"] == DBNull.Value
し、それをnull可能なDateTimeに渡しますか?フィールド。
またはさらに簡単:
row.Field<DateTime?>("column")
そうでない場合は、そうです、Convert.ToDateTime()または他の何かがそれを行う必要があります。
編集:
私はあなたの最終的なコードをそこで見ますが、あなたがこれをしたい可能性はあります:
DateTime? firstIssueDate = r.Field<DateTime?>("fiss");
DateTime? endIssueDate = r.Field<DateTime?>("eiss");
if (firstIssueDate.HasValue && endIssueDate.HasValue)
{
firstIssueDate.Value // blah blah
endIssueDate.Value // blah blah
}
行がそのインデックスの文字列を返す場合は、DateTime.Parse()を使用することをお勧めします。
string prodCode = r["PRD-CDE"].ToString(),statCode = r["STAT"].ToString();
DateTime firstIssueDate = DateTime.Parse(r["FISS"].ToString());
DateTime endIssueDate = DateTime.Parse(r["EISS"].ToString());
必要に応じて、TryParse
を使用することもできます。
Null(DateTime?)またはDBNullではなくデフォルト値(DateTime.MinValueなど)を使用する場合は、次のようにします。
var firstIssueDate = r["FISS"] as DateTime? ?? DateTime.MinValue;
var endIssueDate = r["EISS"] as DateTime? ?? DateTime.MinValue;
foreach (DataRow r in ds.Tables[0].Rows)
{
string prodCode = r["PRD-CDE"].ToString();
string statCode = r["STAT"].ToString();
DateTime firstIssueDate = DateTime.Parse((r["FISS"]).ToString());
DateTime endIssueDate = DateTime.Parse((r["EISS"]).ToString());
if(endIssueDate > DateTime.Now)
{ /*do some thing...*/}
else {/*user invalid...*/}
}
これはコンパイルされ、動作する可能性があります。ただし、本番用コードで実行する必要があるエラーチェックは実行されません。また、DateTime.TryParseを調べ、IFormatProviderを追加して、フォーマットが期待どおりに解析されることを確認してください。
まず、r ["FISS"]。GetType()を実行してコンソールに出力します(または一時停止してデバッガーで確認します)。文字列であると表示されている場合は、上記のアドバイスのほとんどが役立ちます。他のことを言っている場合は、戻って質問を更新してください。
副次的な回答として、静的関数Convert.ToDateTimeも使用できます。
DateTime.Parse(r ["FISS"]。ToString())を使用する方法ですが、「文字列が有効なDateTimeとして認識されなかった」というエラーがスローされます。 r ["FISS"]列に実際の文字列を表示できますか?それは国際化の問題かもしれません...
.NET DateTime型に変換する必要がある特別な形式(標準の.NET DateTime形式ではない)のDateTime文字列がある場合は、DateTime.ParseExact()
メソッドを使用できます。
例を含む詳細については MSDNドキュメント を参照してください。
解析するフォーマットが複数ある場合は、 DateTime.ParseExactメソッド(String、String []、IFormatProvider、DateTimeStyles) を試してください。