CsvReader 日期时间类型 UTC

CsvReader DateTimeKind UTC

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 但无法正常工作

假设您无法覆盖将 CSV 日期转换为 DateTime 值的代码,您可以在转换后更正它,假设您的行类型 (class) 没有该值不可变 属性(即您可以重新设置该值)。

rows = csv.GetRecords<Row>().ToList();

foreach(Row row in rows) {

    row.SomeDateValue = row.SomeDateValue.ToUniversalTime();
}

默认情况下,解析 DateTime 将始终 return 当地时间。您可以选择使用此代码(DateTimeStyles.RoundtripKind 将保留输入字符串中的 DateTime 类型),假设 value 是包含您的日期的字符串:

DateTime parsedDate;
DateTime.TryParseExact(value, "o", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out parsedDate);

或者按照其他答案的建议对已解析的对象使用 ToUniversalTime()