2017-02-22 20 views
0

私は、ProductionDateと呼ばれるDateTimeフィールドを持つSQL Serverテーブルを持っています。このフィールドの形式は次のとおりです。2015-06-29 00:00:00.000
私はこれで、この日付を選択してC#のWinFormアプリケーションを持っている:テーブルからDateTimeフィールドを取得し、C、#で年月日を取得します

string productionDate = String.Empty; 
var prodDate = pallets.Select(r => r.Production_Date); 
if (prodDate.Count() == 1) 
{ 
    productionDate = prodDate.First().ToString(); 
} 

は今、このフォームは、このラインを有する第2のフォームを呼び出します。
EditBOL bol = new EditBOL(BOL, Batch, productionDate)

何私がしようとしているのは、prodDateという値を持つ2番目のフォームに記入してください。私は、関数が呼び出されたときにそれを取得prodDate引数を使用してYearMonth、およびDayフィールドを移入しようとしています
enter image description here


これは次のようにフォームが見えるものです。

public EditBOL(string BOL, string Batch, string prodDate) 
    { 
     InitializeComponent(); 
     txtBOL.Text = BOL; 
     txtBatch.Text = Batch; 
     //Code to breakdown prodDAte variable comes here!! 
    } 

私はさまざまな方法の多くを試してみました:
これが呼び出される関数です。私は
2. DateTime.Now.ToString("yyyy-MM-dd h:mm tt");
3. DateTime dateVariable = prodDate??DateTime.MinValue
私はこのすべてが、私は日付がいずれかになります、ので、関数内でdateProd変数にsubstringを使用したくない、ある試みた理由
を試してみました1-1-2015または10-10-2015。形式はmm-dd-yyyy 00:00:00.000で、それはm-d-yyyy 00:00:00.000
です。したがって、部分文字列はちょうど愚かなようです。だから、文字列をdatetime変数に変換して、DatetimeVariable.Year,DatetimeVariable.Date、およびDatetimeVariable.Monthを実行しようとしています。

EDIT 1:テーブルから日付を選択する方法について、数行のコードを入力しませんでした。

+0

「このフォーマットをフィールドは:2015-06-29 00:00:00.000 " - あなたはそれがDateTimeフィールドであると言いました。この場合、" format "フィールドはありません。 - 値を取得するときには、文字列ではなくDateTimeを取得する必要があります。 –

+0

'var prodDate'はその日付のこの値を取得します: ' 6-29-2015 00:00:00' –

+0

ToString()を呼び出します。私はそれをやめることをお勧めします。 –

答えて

1

あなたがprodDateを解析するために主張すれば、これを試してみてください:

public EditBOL(string BOL, string Batch, string prodDate) 
{ 
     InitializeComponent(); 
     txtBOL.Text = BOL; 
     txtBatch.Text = Batch; 
     //Code to breakdown prodDAte variable comes here!! 
     string[] tokens = prodDate.Split(' ')[0].Split('-'); 
     yearTextBox.Text = tokens[0]; 
     monthTextBox.Text = tokens[1]; 
     dayTextBox.Text = tokens[2]; 
} 

を、私はこのアプローチを好む:

public EditBOL(string BOL, string Batch, string prodDate) 
{ 
     InitializeComponent(); 
     txtBOL.Text = BOL; 
     txtBatch.Text = Batch; 
     //Code to breakdown prodDAte variable comes here!! 
     DateTime date = Convert.ToDateTime(prodDate); 
     yearTextBox.Text = date.Year.ToString(); 
     monthTextBox.Text = date.Month.ToString(); 
     dayTextBox.Text = date.Day.ToString(); 
} 
+0

「インデックスは配列の境界外です」と表示されます。私はこのコードが何を理解すれば、私はそれを修正するだろう。手伝ってくれる? –

+0

あなたの例を入力 '2015-06-29 00:00:00.000'として使用し、正しい結果を得ました。どの入力( 'prodDate')をテストしていますか? – KernelMode

+0

質問を再度確認し、データベースから製造日の値を取得するために使用されるコードを編集しました。謝罪します。 –

1

あなただけDateTime.ParseExact()を使用することができます。

public EditBOL(string BOL, string Batch, string prodDate) 
{ 
    InitializeComponent(); 
    txtBOL.Text = BOL; 
    txtBatch.Text = Batch; 

    string format = "yyyy-M-d h:m:s.fff"; 
    DateTime dt = DateTime.ParseExact(prodDate, format, CultureInfo.InvariantCulture); 

    textBoxYear.Test = dt.Year.ToString(); 
    textBoxMonth.Test = dt.Month.ToString(); 
    textBoxDay.Test = dt.Day.ToString(); 
} 
+0

忘れて、私もそれを試しました。しかし、私は別の変数にフォーマットを保存して、それをParseExactで使用しようとしませんでした。そのショットを今すぐ提供します。ありがとうございました –

+0

@CrazyCucumber、私は 'format'変数を編集しました。編集された答えを見てください。 –

+0

@CrazyCucumber、私のソリューションはあなたのために機能しますか? –

関連する問題