2013-12-14 2 views
0

У меня есть текстовый файл с DateTimes хранящимися как это: 30/11/2013 1:18:36 PMСтрока DATETIME независимо от DateTime формата

Это нормально, если вы только запустить программу на одной машине, так как DateTime сохраняется в том же формате, что и используется система. Однако я просто столкнулся с проблемой, когда, если я изменяю пользователя на одну из моих других учетных записей, которые по какой-то причине используют формат MM/DD/YYYY, возникает ошибка. Как я могу прочитать DateTime независимо от формата системы? Это то, что я использую сейчас:

RecieptList.Add(new Reciept 
       { 
        ... 
        DateNTime = Convert.ToDateTime(stringArray[(i * 12) + 9]), // == 30/11/2013 1:18:36 PM 
        ... 
       }); 

Спасибо!

+0

Я думаю, что я должен упомянуть, что была ошибка. Он не смог преобразовать строку в datetime. + $ exception \t {"String не был признан действительным DateTime."} – Nathan

+0

У вас есть возможность хранить данные по-другому? –

+0

Каким образом вы думали? – Nathan

ответ

1

Вы можете использовать TryParseExact() для разбора дат.

Попробуйте:

String dt = "30/11/2013 1:18:36 PM";//or anydate 
DateTime result; 
if (DateTime.TryParseExact(dt, "dd/MM/yyyy h:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.None,out result)) 
{ 
    //success use result 
} 

Edit: согласно комментариям, вы упомянули, что вы храните dates в системе dependent culture.

Я настоятельно рекомендую вам использовать аргумент CultureInfo.InvarientCulture, сохраняя даты, чтобы сохранить их в Indepedent culture.

так, чтобы при чтении его на разных машинах не возникало проблем.

Попробуйте это: При хранении Dates в TextFile

String dt = DateObject.ToString(CultureInfo.InvariantCulture); 

теперь вы можете написать строку dt в TextFile.

+0

Иногда строка находится в формате dd/MM/YYYY, иногда ее MM/dd/yyyy, зависит от того, на какой системе установлено значение, когда дата была написана. Ваш пример прочитал бы дату в формате MM/dd/YYYY? – Nathan

+0

@Nathan так меняется формат даты входной строки? это не ясно из вашего вопроса. – psubsee2003

+2

@Nathan: Ваша задача невозможна. Как определить, является ли формат даты MM/dd/yyyy или dd/MM/yyyy. Примите это как пример: 12/11/2013. Это 12 ноября 2013 года или 11 декабря 2013 года? – jAC

0

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

CultureInfo ci = Thread.CurrentUICulture ; // ci refers to the current UI culture 
Convert.ToDateTime(dateStr, ci); 

Замените код на вышеуказанное, и он должен работать. Вы можете найти больше примеров ниже

Convert.ToDateTime Method (String, IFormatProvider)

DateTime.TryParse Method (String, IFormatProvider, DateTimeStyles, DateTime)

+0

Я упомянул CurrentUICulture, есть разница между CurrentCulture и CurrentUICulture. –

+0

Простите, я упустил это. –

Смежные вопросы