为什么在c#中将JSON转换为CSV时会自动更改日期格式?

时间:2016-12-19 12:16:06

标签: c# json csv

我有一个包含字符串日期值的大型json。我正在使用以下代码将我的JSON转换为CSV:

StringWriter csvString = new StringWriter();
using (var csv = new CsvWriter(csvString))
{
    csv.Configuration.SkipEmptyRecords = true;
    csv.Configuration.WillThrowOnMissingField = false;
    csv.Configuration.Delimiter = delimiter;

    using (var dt = jsonStringToTable(jsonContent))
    {
        foreach (DataColumn column in dt.Columns)
        {
            csv.WriteField(column.ColumnName);
        }
        csv.NextRecord();

        foreach (DataRow row in dt.Rows)
        {
            for (var i = 0; i < dt.Columns.Count; i++)
            {
                csv.WriteField(row[i]);
            }
            csv.NextRecord();
        }
    }

JSON值是:

[{
    "Amount": "35.80",
    "Parentid": "abcd",
    "code": "CGL",
    "Effective_Date": "2016-04-25T18:30:00"
}]

转换此JSON后,上述日期会自动更改为格式25/4/2016 6:30:00 PM

2 个答案:

答案 0 :(得分:2)

jsonStringToTable是根据您的语言环境使您的JSON字符串值成为日期的原因。当它转换回字符串时,它将以该语言环境的默认格式转换。

为了解决这个问题,你需要在浏览数据表字段时在循环中指定一个条件:

for (var i = 0; i < dt.Columns.Count; i++)
{  
   var myVal = i == myDateColumnIndex ? row[i].ToString("yyyy-MM-dd HH:mm:ss"):row[i].ToString();
   csv.WriteField(myVal );
}

如果您的列是您的日期列(例如按索引),则执行首选格式的字符串(this might help)。

答案 1 :(得分:0)

将日期/时间转换为字符串时,您的代码使用本地(运行代码的机器)区域日期时间格式选项。