.Net DataTable Date проблема - PullRequest
0 голосов
/ 03 июля 2011

Я работаю над проектом, и у меня нет базы данных. Я использую набор данных ADO.Net, а затем для хранения своих данных я пишу XML-файл, читаю XML-файл и снова загружаю набор данных. XML-файл - это файл проекта, и мне нужно переместить этот файл из системы в систему.

В этом наборе данных также есть столбец DateTime.

Я хочу сохранить дату в поле в определенном формате (дд / мм / гггг).

В настоящее время моя проблема заключается в том, что он определяет системный формат даты и читает дату. Но формат даты системы может варьироваться от системы к системе. Некоторые люди используют MM / дд / гггг, а некоторые используют дд / мм / гггг. Таким образом, когда формат изменяется, он генерирует исключения. Есть ли какое-то решение для этого?

Могу ли я заставить поле DataTime таблицы данных принять дату в моем произвольном формате?

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 03 июля 2011

Просто быстрый пример для сериализации / десериализации даты и времени в определенный формат

        DateTime s = DateTime.Now;
        MessageBox.Show(s.ToString("yyddMM"));
        MessageBox.Show(s.ToShortDateString());
        DateTime s2 = DateTime.ParseExact("110307", "yyddMM", CultureInfo.InvariantCulture);
        MessageBox.Show(s2.ToShortDateString());

И я полностью согласен с Джастином здесь .. Пока вы храните дату в текстовом файле, просто используйтевместо строкового поля

0 голосов
/ 03 июля 2011

Объект DateTime просто сохраняет дату как свойство или ряд свойств для Месяца, Года, Дня и т. Д. Но вы можете отформатировать строку даты следующим образом:

     string formatted = String.Format("{0:yyyy/MM/dd HH:mm}", datetime);

Или, если выя получаю системную дату, я думаю, что она будет работать так:

     string formatted = String.Format("{0:yyyy/MM/dd HH:mm}", DateTime.Now);

Или, если вы читаете строку в объект DateTime, вам придется выполнить некоторый анализ:

     string date = "2011/5/20"
     string dateparts = date.Split('/'); 
     string year = dateparts[0];
     string month = dateparts[1]; 
     string day = dateparts[2]; 

     DateTime dt = new DateTime(year, month, day, 0, 0, 0); 

Но объект DateTime может быть инициализирован из различных строковых представлений даты, обычно вам не нужно анализировать.Зависит от вашей ситуации,

0 голосов
/ 03 июля 2011

В прошлом у меня были похожие проблемы с сериализацией даты и времени.

Я бы порекомендовал вам оставить поле даты и времени и использовать вместо него строку. Таким образом, вы полностью контролируете, в каком формате объект даты и времени вводится в ваш набор данных.

После того, как вы ввели его в виде строки, вам нужно записать, в какой культуре и в каком формате записывается дата и время. Вы можете либо жестко кодировать эти два значения в программном обеспечении, и надеяться, что они не изменятся (не идеально). , Перетащите их в файл .config (лучше).

или

Вы добавляете эти дополнительные поля в свой набор данных.

MyDateField   - DateTime as a string
Format.       - "dd/MM/yyyy HH:mm:ss" (for example)
Culture       - "EN-US" 

Поэтому, когда вы читаете свою дату из своего DataSet, чтобы создать экземпляр объекта DateTime, который вы затем используете.

var dateTime = DateTime.ParseExact([mydatefield], [format], new cultureInfo([culture]));

* Обратите внимание, что поля внутри [] - это значения, извлеченные из строки в наборе данных.

Таким образом, вы можете использовать это поле даты и времени на любом компьютере, так как вы указываете в наборе данных, какой поставщик культуры и формата использовать.

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

Лично я бы пошел с чтением информации о формате и культуре из файла .config, так как они вряд ли будут меняться построчно в вашем наборе данных.

0 голосов
/ 03 июля 2011

Вы пробовали это: http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

Вы можете указать формат данных во втором аргументе.

Дата также может быть отформатирована при ее записи с помощью String.format.способ.

...