3

我正在尝试将包含 DateTime 列的 Deedle 框架保存到 csv 文件。但在 CSV 文件中,DateTime 列不包含毫秒。我想以毫秒格式保存它[yyyy-mm-dd hh:mm:ss.000]。我尝试在保存之前将 DateTime 转换为字符串。它工作正常,但性能很低。有没有办法在不转换为字符串的情况下做到这一点?

4

1 回答 1

3

您确实可以在不需要手动转换日期的情况下完成此操作。

SaveCsv方法的签名允许您将对象指定为最后一个参数CultureInfo。在内部,Deedle 代码DateTime在写入文件时确定它是否正在查看一个对象,如果是,则通过调用以下方法写出该日期:

dt.ToString(cultureInfo)

wherecultureInfo是您传入的对象,或者是默认值CultureInfo.InvariantCulture

也就是说,您可以通过传入CultureInfo具有修改格式的对象来指定日期格式。这很简单:

CultureInfo culture = new CultureInfo("en-US");
var dateformat = new DateTimeFormatInfo();  
dateformat.ShortDatePattern = "yyyy-mm-dd";
dateformat.LongTimePattern = "hh:mm:ss.fff";
culture.DateTimeFormat = dateformat;

myFrame.SaveCsv("SomePath.csv", new string[] { "rowKeyColumnName"}, default(char), culture);

为什么我要专门设置LongTimePatternShortDatePattern(与其他几个模式属性之一相反)?如果您查看 文档DateTime.ToString(IFormatProvider),您将看到以下内容:

当前 DateTime 对象的值使用通用日期和时间格式说明符 ('G') 进行格式化,它使用短日期模式和长时间模式格式化输出。

于 2016-01-06T23:14:58.663 回答