Даты не имеют формата. Из MSDN:
Представляет момент времени, обычно выражаемый в виде даты и времени суток.
...
Значения времени измеряются в 100-наносекундных единицах, называемых тактами, а конкретная дата – это количество тактов с 12:00. полночь, 1 января 0001 г. н.э. (н.э.) в календаре GregorianCalendar... Например, значение тика 31241376000000000L представляет дату, пятница, 01 января, 01:00 12:00:00 полночь.
Итак, DateTime
— это просто большое число. Представление их в виде "дд/мм/гггг" является частью магии типа DateTime
. Часть проблемы заключается в следующем:
Console.WriteLine(ds.Tables(0).Rows(x)(z).ToString())
Элементы строки: Object
. Он не будет действовать как тип DateTime
, если/пока вы не введете его в переменную DateTime
. Это печатается как DateTime
простое, потому что DataTable знает базовый тип; но он будет использовать формат по умолчанию для вашей культуры. Из-за этого выглядит так, будто даты имеют встроенный формат (или даже что "формат изменился", если вы попытались установить его на что-то), но вы человек, и 635882810022222112L
не имеет смысла для большинства из нас.
Чтобы изменить стиль вывода, вам сначала нужно передать его в переменную DateTime
. Очевидно, предварительным шагом является определение того, является ли произвольный столбец датой. Вместо проверки «формата» вывода проверьте базовый тип данных. Это предполагает правильный столбец DateTime
в DataTable
:
If ds.Tables(0).Columns(n).DataType = GetType(DateTime) Then
'...
End If
' Or:
If ds.Tables(0).Rows(x)(z).GetType Is GetType(DateTime) Then
'...
End If
Затем, чтобы изменить отображение, сначала введите его в переменную DateTime
:
Dim dt As DateTime
If ds.Tables(0).Rows(x)(z).GetType Is GetType(DateTime) Then
dt = Convert.ToDateTime(ds.Tables(0).Rows(x)(z))
' cant change "format" but you can change how it displays:
Console.WriteLine(dt.ToLongDateString)
Console.WriteLine(dt.ToString("yyyy-MM-dd HH:mm tt"))
Console.WriteLine(dt.ToString("dd MMM, yyyy"))
End If
Более простой способ получить и преобразовать в DateTime
— использовать расширение Field(Of T)
:
Dim dt = ds.Tables(0).Rows(x).Field(Of DateTime)(y)
when I peform the insert usually do this: Date.Now.ToString("yyyy-MM-dd HH:mm:ss") so I apply a format to date to insert... if I don't format correctly the date as I shown I get this value 0000-00-00 00:00:00
Это не применяет формат к дате. Он преобразует DateTime
в строку. Хотя "гггг-ММ-дд ЧЧ:мм:сс" является правильным форматом для использования при передаче данных даты в виде строки в MySql, он не нужен. Поставщик данных MySQL знает, как преобразовать переменную Net DateTime
в данные, которые нужны / нужны MySql, и обратно - это его работа.
' this will work fine
cmd.Parameters.Add("@SomeDate", MySqlDbType.DateTime).Value = myDateTimeVar
Требование к формату, о котором вы читали, - это то, что вам нужно использовать в оболочке MySql или пользовательском интерфейсе WorkBench, потому что вы вводите там текст/строку... с клавиатуры. Это не означает, что код должен преобразовывать DateTime
переменных в строки в определенном формате для хранения.
13.01.2016