CsvReader序列化程序正在转换字符串" 2017-01-09T00:01:47.6145940Z"到当地时间,但我想保留UTC的记录。
没有传递Map,有没有办法定义DateTimeStyle?
以下是转换代码:
using (var reader = new StreamReader(lakeStream))
using (var csv = new CsvReader(reader, new CsvConfiguration()
{
HasHeaderRecord = hasHeaderRecord,
Delimiter = delimiter,
IgnoreBlankLines = true,
IsHeaderCaseSensitive = false,
}))
{
rows = csv.GetRecords<T>().ToList();
}
我尝试过CultureInfo,但无法让它发挥作用
答案 0 :(得分:1)
假设您无法覆盖将CSV日期转换为DateTime
值的代码,您可以在转换后更正它,假设您的行类型(class
)没有不可变属性对于值(即您可以重新设置值)。
rows = csv.GetRecords<Row>().ToList();
foreach(Row row in rows) {
row.SomeDateValue = row.SomeDateValue.ToUniversalTime();
}
答案 1 :(得分:0)
默认情况下,解析DateTime将始终返回本地时间。您可以选择使用此代码,(DateTimeStyles.RoundtripKind
将保留输入字符串中的DateTime种类),假设value
是包含您日期的字符串:
DateTime parsedDate;
DateTime.TryParseExact(value, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out parsedDate);
或者在解析的对象上使用ToUniversalTime()
,如另一个答案所示。