C# 转换为csv C时如何替换格式日期#

C# 转换为csv C时如何替换格式日期#,c#,asp.net,csv,C#,Asp.net,Csv,我在将数据转换为csv时遇到问题,尤其是格式日期“dd-MM-yyyy” public void Export\u CSV(数据表dt、字符串文件名、字符串分隔符、字符串路径) { 字符串路径=HttpContext.Current.Server.MapPath(“~/”+path+“/”+FileName+“.csv”); StringBuilder sb=新的StringBuilder(); string[]columnNames=dt.Columns.Cast()。 选择(column=>

我在将数据转换为csv时遇到问题,尤其是格式日期“dd-MM-yyyy”

public void Export\u CSV(数据表dt、字符串文件名、字符串分隔符、字符串路径)
{
字符串路径=HttpContext.Current.Server.MapPath(“~/”+path+“/”+FileName+“.csv”);
StringBuilder sb=新的StringBuilder();
string[]columnNames=dt.Columns.Cast()。
选择(column=>column.ColumnName)。
ToArray();
sb.AppendLine(string.Join(“,”,columnNames));
foreach(数据行中的数据行)
{
string[]fields=row.ItemArray.Select(field=>field.ToString())。
ToArray();
sb.AppendLine(string.Join(“,”字段));
}
writealText(路径,sb.ToString());
}
结果,格式化日期不是常数。它应该像“dd-MM-yyyy”


您可以尝试设置CurrentInfo.CurrentCulture的默认日期时间格式,这样您就可以强制使用ToString将输出的默认日期时间格式

我相信默认情况下,.ToString()将生成与短字符串格式相关的d/MM/yyyy

在输出日期之前,尝试将以下内容添加到代码中

CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";
Thread.CurrentThread.CurrentCulture = culture;
要恢复到设置的状态,只需添加一些代码来存储原始值,然后在方法末尾重置

CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
var originalShortDatePattern = culture.DateTimeFormat.ShortDatePattern
culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";
Thread.CurrentThread.CurrentCulture = culture;
...
Your code
...
culture.DateTimeFormat.ShortDatePattern = originalShortDatePattern ;
Thread.CurrentThread.CurrentCulture = culture;

值得一试

似乎是Excel中使用的US date格式(它试图将其解释为MM dd yyyy,成功与否取决于第一个数字是否大于12)。您可以检查记事本中的CSV文件,并确保其中的日期正确无误。如果可以将日期存储为Excel中的文本,则可以使用一个单引号字符作为日期值的前缀。否则,您必须了解为什么使用dd-MM-yyyy而excel使用MM-dd-yyy。数据源中的日期是如何存储的?该字段是日期时间字段还是字符串(varchar等)字段?正确转换的数据与未正确转换的数据之间有什么区别?
CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); 
var originalShortDatePattern = culture.DateTimeFormat.ShortDatePattern
culture.DateTimeFormat.ShortDatePattern = "dd-MMM-yyyy";
Thread.CurrentThread.CurrentCulture = culture;
...
Your code
...
culture.DateTimeFormat.ShortDatePattern = originalShortDatePattern ;
Thread.CurrentThread.CurrentCulture = culture;