![解释](https://linux22.com/image/6197/%E8%A7%A3%E9%87%8A.png)
需要“1832-09-02”格式的“9-2-1832”格式的字符串。必须能够填写 mysql 中的“日期”类型字段。
答案1
如果您允许额外的工具(毕竟您标记了 mysql),您可以使用来自日期实用程序包:
$ dateconv -i %m-%d-%Y "9-2-1832"
1832-09-02
不同之处在于GNU date
您可以使用格式说明符(参数)指定输入格式-i
。这样任何类型的日期都可以被解析。
由于您希望将标准 ISO 8601 格式设置为输出(包中所有工具的默认设置),因此不必在那里指定任何内容。
免责声明:我是 dateutils 的作者。
答案2
假设您的原始日期是“月-日-年”(1832 年 9 月 2 日),类似这样的日期可能有效:
$ date -d $(sed "s/-/\//g" <<< '9-2-1832') +%Y-%m-%d
1832-09-02
解释
即使在当前的 8.25 版本中,该date
命令也不会接受您列出的格式的日期(“9-2-1832”,以连字符作为分隔符的月日年日期字符串)。
$ date -d '9-2-1832' +%Y-%m-%d
date: invalid date ‘9-2-1832’
但date
将要接受以斜杠作为分隔符的月日年日期字符串。
$ date -d '9/2/1832' +%Y-%m-%d
1832-09-02
您可以sed
像这样将连字符替换为斜杠。
$ sed "s/-/\//g" <<< '9-2-1832'
9/2/1832
然后您可以将该sed
命令放入子 shell 中以将所有内容放在一起。
$ date -d $(sed "s/-/\//g" <<< '9-2-1832') +%Y-%m-%d
1832-09-02