【发布时间】:2020-04-16 17:43:07
【问题描述】:
假设我有以下data.csv 文件。
Timestamp,DoubleCol,BooleanCol,StringCol
04/15/2020 06:45:02.085-07:00,1.52,True,Some String
04/15/2020 06:45:03.057-07:00,2.32,False,Some String
04/15/2020 06:45:04.058-07:00,4.55,True,Some String
04/15/2020 06:45:05.057-07:00,1.52,False,Some String
04/15/2020 06:45:06.057-07:00,2.32,True,Some String
04/15/2020 06:45:07.057-07:00,4.55,False,Some String
04/15/2020 06:45:08.057-07:00,1.52,True,Some String
04/15/2020 06:45:09.058-07:00,2.32,False,Some String
04/15/2020 06:45:10.057-07:00,4.55,True,Some String
04/15/2020 06:45:11.057-07:00,1.02,False,Some String
我需要将此 CSV 读入 Frame,对 Timestamp 列进行一些过滤,然后写入一个 CSV,但 Timestamp 列是 ISO 8601 字符串。
如果我只是这样做,第一列是字符串类型,而不是 DateTimeOffset。
filePath = "data.csv";
timestampFormat = "MM/dd/yyyy HH:mm:ss:fffK"; // This is sent along with the CSV file.
var frame = Frame.ReadCsv(filePath);
另外,如果我试试这个:
var tsFrame = frame.IndexRows<DateTime>("Timestamp");
我明白了
FormatException: String '04/15/2020 06:45:02.085-07:00' was not recognized as a valid DateTime.
那么如何指定解析第一列时使用的 DateTime 格式呢?
然后,如何在写出 CSV 时指定使用 ISO 8601?
注意
这是一个简化的场景。实际上,我事先并不知道架构。除了第一列是时间戳(我也收到了格式)。其余的列可以是任何东西。所以我需要一个不依赖于编译时模式的解决方案。
【问题讨论】:
-
使用 zzz 代替 K : "MM/dd/yyyy HH:mm:ss.fffzzz";
-
我无法控制格式。我刚收到。但是,是的,我总是可以用
zzz替换K。 -
修改后能否读取数据?编写时使用 tsFrame.ToStroing(""MM/dd/yyyy HH:mm:ss:fffzzz"")
标签: c# csv datetime datetime-format deedle