更改日期格式

更改日期格式

给定一个包含日期作为子字符串的字符串,如何将该子字符串从一种日期格式转换为另一种日期格式?更具体地说,我有以下问题:

  1. 如何将日期字符串“10/24/2017 8:00:00 AM”转换为日期字符串“20171024 8:00:00 AM”?

  2. 如何将“Data1|Data2|Data3|10/24/2017 8:00:00 AM”转换为“Data1|Data2|Data3|20171024 8:00:00 AM”?

  3. 如果我有一个名为“Sample.csv”的文件,其中包含这种形式的行(即管道分隔的数据),如何转换“Sample.csv”每一行中的日期(如上一个问题)?

答案1

这是date您要查找的命令:

date -d '${DATE_STRING}' '+%Y%m%d %H:%M:%S %p'

-d(等效)标志--date用于指定表示日期/时间输入的字符串。手册对此是这样说的:

日期字符串

--date=STRING 是一个大多数自由格式的人类可读日期字符串,例如“Sun, 29 Feb 2004 16:21:42 -0800”或“2004-02-29 16:21:42”甚至“下周四” 。日期字符串可以包含指示日历日期、一天中的时间、时区、星期几、相对时间、相对日期和数字的项目。空字符串表示一天的开始。日期字符串格式比此处轻松记录的更复杂,但在信息文档中有完整描述。

使用您帖子中给出的日期字符串,上面的示例将如下所示:

date -d '10/24/2017 8:00:00 AM' '+%Y%m%d %H:%M:%S %p'

如果您想从您给出的示例中的完整字符串中提取日期,那么您可以这样做:

DATE_STRING="Data1|Data2|Data3|10/24/2017 8:00:00 AM"
date -d "$(echo "${DATE_STRING}" | cut -d'|' -f4)" '+%Y%m%d %H:%M:%S %p'

要获得单个字符串所需的最终结果,您可以执行如下操作:

DATE_STRING="Data1|Data2|Data3|10/24/2017 8:00:00 AM"
echo "$(echo "${DATE_STRING}" | cut -d'|' -f1,2,3)|$(date -d "$(echo "${DATE_STRING}" | cut -d'|' -f4)" '+%Y%m%d %H:%M:%S %p')"

最后,要在文件中的每一行运行此命令,您可以执行以下操作:

while read line; do echo "$(echo "${DATE_STRING}" | cut -d'|' -f1,2,3)|$(date -d "$(echo "${DATE_STRING}" | cut -d'|' -f4)" '+%Y%m%d %H:%M:%S %p')"; done < Sample.csv

相关内容