如何将所有DateTime字段写为ISO 8601字符串?

问题描述 投票:1回答:1

我正在从IEnumerable<dynamic>对象中写入CSV。我不知道这些对象可以有多少DateTime个字段,也不知道它的名称。

是否有办法告诉CsvWriter将所有DateTime对象写为ISO 8601字符串?

var records = new List<dynamic>();

dynamic record = new ExpandoObject();
record.Timestamp = DateTime.UtcNow;
records.Add(record);

using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(records);
    writer.ToString().Dump(); // I want the DateTime to be in ISO 8601 format (2020-05-01T15:29:19Z)
}

https://dotnetfiddle.net/1ng5W9

c# csv iso8601 csvhelper
1个回答
1
投票

您可以使用TypeConverterOptions并将选项应用到DateTime

using (var writer = new StringWriter())
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    var options = new TypeConverterOptions { Formats = new [] {"s"} };
    //apply options to datetime
    csv.Configuration.TypeConverterOptionsCache.AddOptions<DateTime>(options);

    csv.WriteRecords(records);
    writer.ToString().Dump();
}

// output
// 2020-05-01T16:02:36

这使用"s"(可排序的日期时间格式)。您可以应用任何喜欢的格式,例如:Formats = new [] { "yyyy-MM-ddTHH:mm:ss" }将给出类似的结果。

请参阅更新的demo

© www.soinside.com 2019 - 2024. All rights reserved.