1

这比编程更像是一个与数据相关的问题,但我不确定在哪里发布它。如果它更适合其他地方,改装者可以自由移动它。

我正在尝试将银行导出的 CSV 导入 GNUcash,但 GNUcash 仅采用特定日期格式,例如 YYYY-MM-DD (1999-05-16),而我的银行仅导出为 YYYYMMDD (19990516)。

我不确定最简单/最方便的方法是转换文件以供使用。编写脚本和/或使用复杂的正则表达式似乎过分但可能是必要的?

我尝试将其加载到 LibreOffice Calc 和 MS Excel 中,但找不到任何转换选项;使用自定义 YYYYMMDD 格式格式化单元格会破坏输出。我希望有一种更简单的方法来解决这个问题。如果没有,我可能最终会编写该脚本并将其放到网上某个地方。

4

3 回答 3

1

您可以使用Notepad2打开您的 CSV ,勾选regular expression search并替换。

如果日期写在双引号和逗号之间:

,"([12][90][901]\d)([01]\d)([0123]\d)",

,"\1-\2-\3",

对于更复杂的事情,Excel 宏或 Ruby 可以帮助您。

于 2016-12-23T18:11:24.443 回答
1

GNUcash 是对的——ISO 格式更好。

但几乎任何脚本工具或语言都具备这方面的功能。在最基本的层面上,我们有 GNU 日期:

$ date --date=20161223 +%Y-%m-%d
2016-12-23
$ 

无论您最终做什么,请不要对日期使用正则表达式。计算日期和时间可能很棘手,如果周围没有未成年人,可能需要更咸的语言。使用可以解析和格式化日期的库。有很多可供选择。

我支持转换 csv 的建议。如果您可以/想要使用 R,则随时包读取没有格式字符串的日期(和日期时间),并且日期的默认格式是您在此处需要的。Python 也有强大的库,大多数其他脚本(和编译)语言也是如此。

于 2016-12-23T18:25:04.740 回答
0

您可以使用 LibreOffice Calc 或 MS Excel 打开文件,然后使用公式转换日期列。

假设在 A1 中您有 19990516,然后使用以下公式进行转换 =date(left(A1,4),mid(A1,5,2),right(A1,2))

于 2016-12-23T21:56:31.643 回答