如何在F#中将自定义日期格式传递给CsvProvider

时间:2019-04-12 15:01:21

标签: f#

我正在使用CsvProvider来解析我从外部来源收到的CSV文件。文件的日期格式为dd / MM / yy。但是CsvProvider将其推断为MM / dd / yy并得出所有日期错误。

有什么办法可以将dateformat传递给CsvProvider?

我可以将日期读取为字符串,然后使用Seq.Map将其转换为Datetime(这是两个步骤)。

我试图找出我是否可以一步一步完成

示例

csv文件sample.csv具有如下数据

11/01/90
12/01/90
13/01/90
14/01/90
15/01/90

我正在使用下面的F#代码

type MyCsvProvider = CsvProvider<Sample= "sample.csv", HasHeaders=false, Schema="Date (date)">
MyCsvProvider.Load("sample.csv")

1 个答案:

答案 0 :(得分:0)

CsvProvider类型的提供程序无法显式指定解析日期的格式,因此,如果您使用某种完全非标准的格式,则只需将其读取为string (这是CSV提供程序无法自动解析日期的推断),然后显式解析日期值。

也就是说,您可以指定Culture参数,这样就可以解析在美国以外的国家/地区中常见的格式的日期。例如,您的日期格式可以很好地适应en-GB的文化(在英国,您首先写日,然后是月,然后是年)。

在下面的小示例中,Test属性被推断为DateTime

type A = CsvProvider<"""Test
11/01/90
12/01/90
13/01/90
14/01/90
15/01/90""",Culture="en-GB">

let r = A.GetSample().Rows |> Seq.head
r.Test