Странное поведение при преобразовании String в DateTime - PullRequest
1 голос
/ 09 февраля 2012

У меня странное поведение при преобразовании String в DateTime, а затем снова в ToString ().

Convert.ToDateTime("16-02-2012").ToString("MM/dd/yyyy") приводит к 02-16-2012 Convert.ToDateTime("16-02-2012").ToLongDateString() приводит к 16. Февраль 2012

Как видите, преобразование корректно при использовании ToLongDateString (), но каким-то образом / преобразуется в - при использовании ToString ().

Когда я вставляю первый результат в лист Excel, значение фактически '02 -16-2012 (обратите внимание на 'в начале)

Когда я использую дату, где первый сегмент меньше 12, результат содержит / как и ожидалось, но возвращается к дд / мм / гггг.

Я пытался использовать new System.Globalization.CultureInfo("da-DK", false) при преобразовании ToDateTime (), но безрезультатно (наша система уже настроена на da-DK - но я отчаялся).

Кто-нибудь видел такое поведение раньше?

EDIT

Для пояснения моего поста, формат даты в датском - dd-mm-yyyy (который я хочу отформатировать в mm / dd / yyyy) - я знаю, что первый сегмент - это месяц в английской дате.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Изменить

Convert.ToDateTime("16-02-2012").ToString("MM/dd/yyyy")

на

Convert.ToDateTime("16-02-2012").ToString("dd/MM/yyyy")

Это просто опечатка.


Если это не то, что вы хотите, попробуйте следующее:

DateTime.Parse("16-02-2012", CultureInfo.CreateSpecificCulture("da-DK"));

Затем вы можете добавить в конец все, что захотите, .ToString(...).


Редактировать 2: Ваш компьютер выводит дату в вашей собственной культуре.Если вы хотите, чтобы проанализированные значения и отображались правильно, вам необходимо предоставить информацию о культуре для каждой операции.

Console.WriteLine(DateTime.Parse("16-02-2012", CultureInfo.CreateSpecificCulture("da-DK")).ToString(CultureInfo.CreateSpecificCulture("da-DK")));
// 16-02-2012 00:00:00
1 голос
/ 09 февраля 2012

Чтобы экспортировать данные в нужном формате, вы можете вставить данные как DateTime и использовать формат ячейки, как в следующем примере (при условии, что ваши даты указаны в столбце A):

Application Excel = new Application();

Workbook workbook = Excel.Workbooks.Add(1);
Worksheet sheet = workbook.Sheets[1];
sheet.Cells[1, 1] = DateTime.Now;
sheet.Cells[2, 1] = DateTime.Now.AddDays(1);
sheet.Cells[3, 1] = DateTime.Now.AddDays(2);
sheet.UsedRange.Columns["A:A", Type.Missing].NumberFormat = "MM/dd/yyyy"; 
workbook.Sheets.Add(sheet);

// Save the workbook or make it visible
...