我正在尝试将包含 DateTime 列的 Deedle 框架保存到 csv 文件。但在 CSV 文件中,DateTime 列不包含毫秒。我想以毫秒格式保存它[yyyy-mm-dd hh:mm:ss.000]。我尝试在保存之前将 DateTime 转换为字符串。它工作正常,但性能很低。有没有办法在不转换为字符串的情况下做到这一点?
问问题
809 次
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);
为什么我要专门设置LongTimePattern
和ShortDatePattern
(与其他几个模式属性之一相反)?如果您查看 文档DateTime.ToString(IFormatProvider)
,您将看到以下内容:
当前 DateTime 对象的值使用通用日期和时间格式说明符 ('G') 进行格式化,它使用短日期模式和长时间模式格式化输出。
于 2016-01-06T23:14:58.663 回答