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

Excel 如何轻松地将具有奇怪日期格式的CSV转换为指定格式?,excel,csv,datetime,type-conversion,gnucash,Excel,Csv,Datetime,Type Conversion,Gnucash,这更像是一个与数据相关的问题,而不是编程,但我不确定还能在哪里发布它。如果它更适合其他地方,模仿者可以自由移动它 我试图将银行导出的CSV导入GNUcash,但GNUcash只采用特定的日期格式,如YYYY-MM-DD(1999-05-16),而我的银行只导出为YYYYMMDD(19990516) 我不确定转换文件以供使用的最简单/最方便的方法是什么。编写脚本和/或使用复杂的正则表达式似乎有些过分,但可能是必要的 我试着将它加载到libreofficecalc和msexcel中,但找不到任何转换

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

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

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


我试着将它加载到libreofficecalc和msexcel中,但找不到任何转换选项;使用自定义YYYYMMDD格式格式化单元格会中断输出。我希望有一个更简单的方法来解决这个问题。如果没有,我可能会编写脚本并将其放到某个在线位置。

您可以使用打开您的CSV,勾选
正则表达式搜索
并替换

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

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

对于任何更复杂的东西,Excel宏或Ruby都可以帮助您。

GNUcash是正确的——ISO格式更好

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

$ date --date=20161223 +%Y-%m-%d
2016-12-23
$ 
无论您最终做什么,请不要使用正则表达式表示日期。计算日期和时间可能很棘手,如果周围没有未成年人,可能需要使用更为粗俗的语言。使用可以解析和格式化日期的库。有很多可供选择


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

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

假设A1中有19990516,然后用下面的公式进行转换
=日期(左(A1,4)、中(A1,5,2)、右(A1,2))

我个人会创建一个宏来打开CSV,更改特定列的日期格式并保存回去。@cyboashu这主意不错,我会试试看它是否有效我喜欢这个地方!每天学习新事物。我试试看!虽然我确实认为正则表达式在这种情况下也可以工作,因为格式是静态的,例如2016-05-05的20160405,而不是201655,用正则表达式解析会有更大的问题。我告诉你:正则表达式是魔鬼。当然,你会把一根绳子分成几段,但这不会阻止你创建34-13-2016。约会课会阻止你。这可能很重要。我同意对于任何更复杂的事情都应该使用带有日期验证的适当脚本。但是现在,唯一的问题是在CSV中查找日期,在这种情况下,UNIX
date
或date类对您没有帮助。如果列和日期格式都已知,我认为使用正则表达式只添加两个破折号没有任何错误。不幸的是,该文件确实包含IBAN编号,因此我无法使用此格式,但无论如何,谢谢!我更新了示例。如果日期在引号或逗号之间,那么这应该更加健壮。整洁!我用了这个,它成功了,谢谢!我也成功地在gnucash中导入了它。。只是为了在道路上遇到另一个障碍,我们需要弄清楚如何将某些交易算作存款,而将其他交易算作取款。。但至少日期现在起作用了!
$ date --date=20161223 +%Y-%m-%d
2016-12-23
$