CsvReader DateTimeKind UTC

时间:2017-01-10 22:53:57

标签: c# datetime streamreader utc serializer

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,但无法让它发挥作用

2 个答案:

答案 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(),如另一个答案所示。