将字符串转换为日期时间时的奇怪行为

发布于 2025-01-04 00:04:28 字数 735 浏览 1 评论 0原文

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

Convert.ToDateTime("16-02-2012").ToString("MM/dd/yyyy") 结果为 02-16-2012 Convert.ToDateTime("16-02-2012").ToLongDateString() 结果为16。 februar 2012

如您所见,使用 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) - 我知道第一段是月份英文日期。

Im experiencing strange behavior when converting String to DateTime and then again ToString().

Convert.ToDateTime("16-02-2012").ToString("MM/dd/yyyy") results in 02-16-2012
Convert.ToDateTime("16-02-2012").ToLongDateString() results in 16. februar 2012

As you can see the conversion is correct when using ToLongDateString() but somehow the / is converted to - when using ToString().

When I insert the first result into a Excel sheet the value is actually '02-16-2012 (notice the ' in the beginning)

When I use a date where the first segment is lower than 12 the result contains / as expected but is reverted to dd/MM/yyyy.

I've tried using new System.Globalization.CultureInfo("da-DK", false) when converting ToDateTime() but with no effect (Our system is already set to da-DK - but I got desperate).

Anyone seen this behavior before?

EDIT

To clarify my post a little, the date format in danish is dd-mm-yyyy (which I want to format to mm/dd/yyyy) - I know that the first segment is month in a english date.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁月无声 2025-01-11 00:04:28

更改

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

Change

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

to

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

It's just a typo.


If that's not what you want, try this:

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

Then you can add whatever .ToString(...) you want on the end.


Edit 2: Your computer is outputting the date in your own culture. If you want it parsed and displayed correctly, you need to provide culture info for each operation.

Console.WriteLine(DateTime.Parse("16-02-2012", CultureInfo.CreateSpecificCulture("da-DK")).ToString(CultureInfo.CreateSpecificCulture("da-DK")));
// 16-02-2012 00:00:00
最佳男配角 2025-01-11 00:04:28

要以所需格式导出数据,您可以将数据插入为 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

To export the data in the format you want, you can insert the data as DateTime and use a cell format like in the following example (assuming your dates are in column 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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文