2013-03-14 5 views
5

У меня есть следующий код -Заданный формат DateTime

DateTime timeStamp; 

timeStamp = System.Convert.ToDateTime(y.InnerText); 

Где y.InnerText является 11/03/2013 11:35:24.

Однако это разбивает мое заявление на импорт как это база данных ищет формат -

2013-03-11 11:35:24 

Как я могу установить формат объекта DateTime?

+1

Что такое тип данных вашей колонки базы данных, если это 'DateTime', то я думаю, вы используете конкатенации для создания запроса. Использовать параметризованные запросы – Habib

+0

'DateTime' является агностиком формата, только если вы конвертируете его в строку, он будет локализован. – Lloyd

+0

Если параметр 'параметр/поле базы данных' '' тип datetime ', вы должны быть в порядке. Не рекомендуется передавать дату в виде строки. В основном дата не имеет формата. – Kaf

ответ

12

Как установить формат объекта DateTime?

Вы не можете. DateTime значения не имеют форматы, не более int или double значения. Когда вы хотите преобразовать их в/из строк, это, где вы указываете любую информацию о форматировании.

Вместо этого вы должны использовать параметризованный SQL и не преобразовывать значение DateTime в строку в первую очередь. Это общая рекомендация - не включайте значения в строку SQL; параметризованных SQL имеет несколько преимуществ:

  • Избегает SQL injection attacks
  • Это позволяет избежать проблемы преобразования, как это один
  • Он держит ваш код (SQL) отдельно от данных (значений параметров)

I будет также предположить, что вместо использования Convert.ToDateTime вы определяете свой ожидаемый формат при разборе. Например:

timeStamp = DateTime.ParseExact(y.InnerText, 
           "dd/MM/yyyy HH:mm:ss", 
           CultureInfo.InvariantCulture); 

В принципе, эти два правила я стараюсь применять следующие:

  • Избегайте выполнения любой преобразования, где вы не должны. Если вы убедитесь, что каждая система использует нужные типы данных, насколько это возможно, вам часто не нужно делать никаких конверсий.
  • Где вам do необходимо преобразовать в/из представлений строк, очень подробно о представлении, которое вы хотите потреблять/производить. Для машиночитаемых значений, которые обычно должны использовать инвариантную культуру и, возможно, пользовательский формат даты и времени. Для человекочитаемых значений, которые обычно должны использовать культуру пользователя и стандартный формат даты/времени.
+0

Отличное обучение! – Ebikeneser

0

вы можете использовать ToString Перекодировка в 2013-03-11 11:35:24

DateTime timeStamp; 

timeStamp = System.Convert.ToDateTime(y.InnerText).ToString("yyyy-MM-dd HH:mm:ss"); 
1

если вы передаете DateTime в SQL базе данных попробовать с yourdatetime.ToString ("//гггг ММ") формат будет работать для вас.

и еще одна вещь, вы можете добавить формат даты и времени для вашей культуры Applicaton. так что это будет относиться к вам формат datetime по вашему желанию.

using System; 
using System.Globalization; 
using System.Threading; 

namespace test { 
    public static class Program { 
     public static void Main() { 
      CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
      culture.DateTimeFormat.ShortDatePattern = "yyyy/MM/dd HH:mm:ss"; 
      culture.DateTimeFormat.LongTimePattern = ""; 
      Thread.CurrentThread.CurrentCulture = culture; 
      Console.WriteLine(DateTime.Now); 
     } 
    } 
} 
0

В принципе дата не имеет формата. Если база данных parameter/field равна Datetime type, вы должны быть в порядке , проходящий как тип даты. Не рекомендуется передавать дату в виде строки.

Однако, если это что-то, с чем вам приходится иметь дело, то лучше передать дату в none culture specific date format (ISO8601 или ISO) в параметризованном запросе. В противном случае у вас могут быть проблемы с серверами баз данных в разных настройках культуры.

Например, для сервера sql безопасно (в конверсии), чтобы передать дату в ISO8601 as;

'yyyy-mm-ddThh:mi:ss.mmm' //(no spaces) 
0

А что, если вы просто переопределите метод ToString() объекта DateTime? Не могли бы вы тогда выбрать нужный формат и каждый раз, когда он будет использоваться, он будет отформатирован так, как вы хотите, не беспокоясь о нем.

Это просто мысль, поэтому я не знаю, есть ли лучшие решения или нет.

Затем вы можете использовать свойства год, месяц, день, чтобы построить его, как хотите. Что-то вроде:

public override ToString(){ 
    return this.Year + "-" + this.Month + "-" + this.Day; 
} 

Привет

+0

И у вас нет «формата» для вас объекта DateTime, , но вы просто скажете, как он должен использовать свой метод ToString. –

0

Я использую этот шаг 1. Преобразовать в DateTime. 2. Использовать ToString(); функция

Пример:

DateTime myDateTime = DateTime.Now; 
string myDateTimeString = myDateTime.ToString("yyyy-mm-dd hh:mm:ss"); 
Смежные вопросы