解释

解释

需要“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

相关内容