Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串转换为日期时间时的奇怪行为_C#_Excel_Datetime_Tostring_Cultureinfo - Fatal编程技术网

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

C# 将字符串转换为日期时间时的奇怪行为,c#,excel,datetime,tostring,cultureinfo,C#,Excel,Datetime,Tostring,Cultureinfo,在将字符串转换为DateTime然后再转换为字符串时,我遇到了奇怪的行为 Convert.ToDateTime16-02-2012.ToStringMM/dd/yyyy结果为2012年2月16日 Convert.ToDateTime16-02-2012.ToLongDateString结果为16。2012年2月 正如您所看到的,当使用ToLongDateString时,转换是正确的,但是当使用ToString时,/被转换为- 当我将第一个结果插入Excel工作表时,值实际上是“02-16-201

在将字符串转换为DateTime然后再转换为字符串时,我遇到了奇怪的行为

Convert.ToDateTime16-02-2012.ToStringMM/dd/yyyy结果为2012年2月16日 Convert.ToDateTime16-02-2012.ToLongDateString结果为16。2012年2月

正如您所看到的,当使用ToLongDateString时,转换是正确的,但是当使用ToString时,/被转换为-

当我将第一个结果插入Excel工作表时,值实际上是“02-16-2012注意”开头的

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

我试过使用新System.Globalization.CultureInfo-DK,转换到DateTime时为false,但没有效果,我们的系统已经设置为da-DK,但我绝望了

以前有人见过这种行为吗

编辑

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

更改

Convert.ToDateTime("16-02-2012").ToString("MM/dd/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
改变

这只是一个打字错误

如果这不是您想要的,请尝试以下方法:

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

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

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


分隔符是什么并不重要。我不能像你建议的那样更改代码,因为当我需要格式化从2012年2月16日到2012年2月16日的日期时,这将导致错误的结果,直到相同的错误结果:Excel中的2012年2月16日-'2012年2月16日。我知道现在值的排列是正确的,但是格式仍然是错误的,而且不知怎么的,日期被错误地解析了。再次感谢你。您需要在每次解析或输出时提供区域性信息,否则.NET将使用您当前的区域性。当我在解析和ToString中使用区域性信息时,结果是相同的:02-16-2012。分隔符是什么无关紧要。我不能像您建议的那样更改代码,因为当我需要格式化从2012年2月16日到2012年2月16日的日期时,这将导致错误的结果,直到相同的错误结果:Excel中的2012年2月16日-'2012年2月16日。我知道现在值的排列是正确的,但是格式仍然是错误的,而且不知怎么的,日期被错误地解析了。再次感谢你。每次解析或输出时,您都需要提供区域性信息,否则.NET将使用您当前的区域性。当我在解析和ToString中使用区域性信息时,结果是相同的:02-16-2012。@vc74-在问题16的上下文中,显然是日期而不是月份。为什么有6个人投票支持这个评论,这毫无意义,显然,在Marle所在的地区,他们使用DD/MM/YYYY约定。@Marle1-您知道代码的行为完全正确吗?@Marle1它不起作用的原因是丹麦文化使用连字符作为日期分隔符,而to string使用/作为日期分隔符的占位符。@Ramhound,true,我看问题看得太快了。下次,请用Excel标记您的问题,以便其他人知道您正在查找Excel特定的信息。@vc74-显然,在问题16的上下文中,日期不是月份。为什么有6个人投票支持这个评论,这毫无意义,显然,在Marle所在的地区,他们使用DD/MM/YYYY约定。@Marle1-您知道代码的行为完全正确吗?@Marle1它不起作用的原因是丹麦文化使用连字符作为日期分隔符,而to string使用/作为日期分隔符的占位符。@Ramhound,true,我阅读问题的速度太快。下次,请用Excel标记您的问题,以便其他人知道您正在查找Excel特定的信息。您的代码生成:System.FormatException:字符串未被识别为有效的日期时间。仅供参考,分隔符实际上并不重要:Console.WriteLineDateTime.Now.ToStringMM/dd/yyyy;2012年9月2日Console.WriteLineDateTime.Now.ToString GMM-dd-yyyy;02-09-2012@SpikeX更确切地说,您的区域性是什么DateTimeFormatInfo.CurrentInfo.DateSeparator的值是什么?@SpikeX这是您的代码在m上生成的内容
y欧洲机器:Console.WriteLineDateTime.Now.ToStringMM/dd/yyyy;02-09-2012 Console.WriteLineDateTime.Now.ToString GMM-dd-yyyy;02-09-2012好的,你的回答几乎解决了我的问题。输出值现在是2012年2月16日,但我仍然在Excel中看到“在我的日期前”。如果日期的第一段小于12,则情况并非如此。仍然认为文化还没有完全渗透……是的,你可以,使用我在评论表中写的代码。Cells[1]。NumberFormat=MM/dd/yyyy;将使用您期望的格式格式化第一列,因此只需在保存文件之前添加此行,这样就可以用代码生成的日期列的索引替换1:System.FormatException:String未被识别为有效的日期时间。仅供参考,分隔符实际上并不重要:Console.WriteLineDateTime.Now.ToStringMM/dd/yyyy;2012年9月2日Console.WriteLineDateTime.Now.ToString GMM-dd-yyyy;02-09-2012@SpikeX更确切地说,您的文化是什么DateTimeFormatInfo.CurrentInfo.DateSeparator的值是什么?@SpikeX这是您的代码在我的欧洲机器上生成的内容:Console.WriteLineDateTime.Now.ToString gmm/dd/yyyy;02-09-2012 Console.WriteLineDateTime.Now.ToString GMM-dd-yyyy;02-09-2012好的,你的回答几乎解决了我的问题。输出值现在是2012年2月16日,但我仍然在Excel中看到“在我的日期前”。如果日期的第一段小于12,则情况并非如此。仍然认为文化还没有完全渗透……是的,你可以,使用我在评论表中写的代码。Cells[1]。NumberFormat=MM/dd/yyyy;将使用您期望的格式格式化第一列,因此只需在保存文件之前添加此行,这样就可以用日期列的索引替换1