如何轻松地将具有奇怪日期格式的 CSV 转换为指定格式?

How do I easily convert a CSV with a strange date format to a specified format?

与其说是编程,不如说这是一个与数据相关的问题,但我不确定 post 还有什么地方可以解决这个问题。如果它更适合其他地方,改装者可以自由移动它。

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

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

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

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

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

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

,"--",

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

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

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

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

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

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

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

假设你在A1中有19990516,然后用下面的公式换算 =日期(左(A1,4),中(A1,5,2),右(A1,2))