将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) - 我知道第一段是英语日期的月份。
答案 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