将String转换为DateTime时的奇怪行为

时间:2012-02-09 13:49:21

标签: c# excel datetime tostring cultureinfo

将String转换为DateTime,然后再转换为ToString()时遇到奇怪的行为。

Convert.ToDateTime("16-02-2012").ToString("MM/dd/yyyy")会导致 02-16-2012 Convert.ToDateTime("16-02-2012").ToLongDateString()会产生 16。 2012年2月

正如您所看到的,当使用ToLongDateString()时,转换是正确的,但在使用ToString()时,某种方式将/转换为 - 。

当我将第一个结果插入Excel工作表时,该值实际为 '02 -16-2012 (注意'开头的')

当我使用第一段低于12的日期时,结果包含/,如预期,但会恢复为dd / MM / yyyy。

我在转换ToDateTime()时尝试使用new System.Globalization.CultureInfo("da-DK", false)但没有效果(我们的系统已经设置为da-DK - 但我非常绝望)。

之前有人见过这种行为吗?

修改

为了澄清我的帖子,丹麦语中的日期格式是dd-mm-yyyy(我想格式化为mm / dd / yyyy) - 我知道第一段是英语日期的月份。

2 个答案:

答案 0 :(得分:3)

更改

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 :(得分:1)

要以您想要的格式导出数据,您可以将数据作为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