将 LDAP 时间戳转换为 Linux shell 中的不同格式

Convert LDAP timestamp to different format in Linux shell

我在 Linux 中使用 ldapsearch 命令获取有关用户的 LDAP 信息。最后一次身份验证时间以一种似乎称为“FileTime”的格式返回:

authTimestamp: 20200804154203Z

如何使用常见的 Linux shell 命令将此时间戳转换为更具可读性的日期,例如 2020-08-04 15:42?我尝试使用 date 命令,但它无法识别给定的输入格式...

> date --date "20200415062835Z"
date: invalid date ‘20200415062835Z’

似乎date只允许定义特殊的输出格式。换句话说,我可以以 LDAP returns (date +%Y%m%d%H%M%SZ) 的格式打印当前日期,但我找不到告诉 date 它应该使用 +%Y%m%d%H%M%SZ 作为输入格式。

知道 LDAP authTimestamp 的确切输入格式(例如,20200415062835Z)我想出了一个相当简单的函数来将其转换为 YYYY-MM-DD hh:mm:ss 格式,以防输入匹配给定的正则表达式。

function _convert_ldap_timestamp() {
    ts=
    if [[ "${ts}" =~ ^[0-9]{14}Z$ ]]; then
        echo "${ts:0:4}-${ts:4:2}-${ts:6:2} ${ts:8:2}:${ts:10:2}:${ts:12:2}"
    fi
}

执行示例:

> _convert_ldap_timestamp 20200804154203Z
2020-08-04 15:42:03