如何将所有 DateTime 字段写为 ISO 8601 字符串?
How to write all DateTime fields as ISO 8601 strings?
我正在用 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)
}
您可以使用 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。
我正在用 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)
}
您可以使用 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。