从字符串解析日期

Bash:
从字符串解析日期

如何操作:

Bash 本身在直接日期解析能力上相当有限,通常依赖于像 dateawk 这样的外部工具来进行更精细的操作。以下是如何解析特定格式,然后使用 date 命令转换它或执行操作的方法。

示例 1: 提取日期字符串并转换成另一种格式。

假设您有一个日期格式为 yyyy-mm-dd,并且您想将其转换为 dd-mm-yyyy

original_date="2023-04-01"
formatted_date=$(date -d $original_date '+%d-%m-%Y')

echo $formatted_date

示例输出:

01-04-2023

这使用了 date 命令和 -d 选项来指定输入的日期字符串,以及 +%d-%m-%Y 来格式化输出。

示例 2: 使用 awk 从结构化文本行中解析日期并转换它。

假设您有一个日志文件行:

2023-04-01 12:00:00 用户登陆了

您可以使用 awkdate 来提取并转换日期部分。

log_line="2023-04-01 12:00:00 用户登陆了"
date_part=$(echo $log_line | awk '{print $1}')
formatted_date=$(date -d $date_part "+%A, %B %d, %Y")

echo $formatted_date

示例输出:

星期六, 4月 01, 2023

这个示例使用 awk 来拆分日志行并提取日期部分($1 代表第一个以空格分隔的字段),然后使用 date 来重新格式化它。

使用第三方工具

对于更复杂的解析,或当处理多种日期格式时,像 dateutils 这样的第三方工具可以非常方便。

使用 dateutils 的示例:

假设您有一个日期字符串,其格式不是标准格式,例如,April 01, 2023

original_date="April 01, 2023"
formatted_date=$(dateconv -i "%B %d, %Y" -f "%Y-%m-%d" <<< $original_date)

echo $formatted_date

示例输出:

2023-04-01

此命令使用来自 dateutilsdateconv,用 -i 指定输入格式,用 -f 指定所需的输出格式。dateutils 支持广泛的日期和时间格式,使其非常适用于 Bash 脚本中的日期解析任务。