2017-02-22 89 views
0

У меня есть таблица SQL Server с полем DateTime, которое называется ProductionDate. Формат этого поля: 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(); 
} 

Теперь эта форма вызывает вторую форму с этой линией:
EditBOL bol = new EditBOL(BOL, Batch, productionDate)

Что Я пытаюсь это сделать, заполните вторую форму значением prodDate.
Это то, что форма выглядит следующим образом:
enter image description here

Я пытаюсь заполнить Year, Month и Day полей с помощью prodDate аргумента он получает, когда функция вызывается.
Это функция, которая вызывается:

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

Я пробовал много различных методов. Я попытался
1. DateTime.Parse(prodDate, "yyyy-mm-dd", culture)
2. DateTime.Now.ToString("yyyy-MM-dd h:mm tt");
3. DateTime dateVariable = prodDate??DateTime.MinValue
Причина, я попытался все это, я не хочу использовать substring на переменную dateProd в функции, потому что дата может быть 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, и в этом случае у него нет« формата », - когда вы получаете значение, вы должны просто получить 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, работает ли мое решение для вас? –