在Shell脚本中使用YYYY-MM-DD日期格式

1487

我在bash shell脚本中尝试使用$(date),但是我想要的日期格式是YYYY-MM-DD
我该如何获取?


15
评论长度必须至少为15个单词。date -I - abc
26
确实,date -I 就是你需要的全部内容。我花了好几年才偶然发现这个命令。 - Sridhar Sarnobat
6
date -I 只适用于 Linux 上的 GNU 工具,并不适用于 macOS/ BSD。安装 brew 后,运行 brew install coreutils 即可使用 gdate -I 命令。 - ssc
18个回答

9
每当我有这样的任务时,我最终都会退回到
$ man strftime

提醒自己有关时间格式选项的所有可能性。


9

我使用$(date +"%Y-%m-%d")$(date +"%Y-%m-%d %T")来获取日期和时间。


7
尝试使用这个命令:
date | cut -d " " -f2-4 | tr " " "-" 

输出结果将会像这样:2021年2月21日

这是有史以来最糟糕的方法!它不仅更冗长、更慢,而且对于大多数语言环境根本无效。例如尝试使用“LC_ALL=C.UTF-8 date”、“LC_ALL=de_DE.UTF-8 date”、“LC_ALL=fr_FR.UTF-8 date”、“LC_ALL=ru_RU.UTF-8 date”或“LC_ALL=el_GR.UTF-8 date”等指令。它甚至不能适用于所有英语语言环境。 - phuclv
date 命令会输出当前语言环境下的可读日期,因此解析它与解析 apt install 的输出一样无用。 - phuclv

6
#!/bin/bash -e

x='2018-01-18 10:00:00'
a=$(date -d "$x")
b=$(date -d "$a 10 min" "+%Y-%m-%d %H:%M:%S")
c=$(date -d "$b 10 min" "+%Y-%m-%d %H:%M:%S")
#date -d "$a 30 min" "+%Y-%m-%d %H:%M:%S"

echo Entered Date is $x
echo Second Date is $b
echo Third Date is $c

这里x是用作示例日期,然后示例显示了数据格式以及获取比当前日期晚10分钟的日期。


4
echo "`date "+%F"`"

将打印 YYYY-MM-DD


  1. %F 已经有很多答案了。
  2. 这是错误的,而且在很多方面都是冗余的:使用反引号已经被弃用了,看到那些难以阅读的引号了吗?使用 $() 会更容易阅读;当当前 shell 中只需要一个 date "+%F" 时,就没有必要生成子 shell、捕获其输出并使用 echo 打印了。
- phuclv

4

date +%Y-%m-%dT%H:%M:%S

会打印出类似于2023-07-18T11:09:16的内容,通常被称为RFC-3339。


0

你可以将日期设置为环境变量,稍后可以使用它。

setenv DATE `date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"

或者

DATE =`date "+%Y-%m-%d"`
echo "----------- ${DATE} -------------"

```backticks`` 已经过时和被弃用很久了。永远不要使用它们,而是使用 $()`,因为它是可嵌套和易读的。 - phuclv

-5

尝试使用此代码生成一个简单易读的时间戳:

dt=$(date)
echo $dt

输出:

Tue May 3 08:48:47 IST 2022

1
OP特别要求使用YYYY-MM-DD格式。 - phuclv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接