如何将SSL证书中的长日期转换为短日期| Unix KSH

问题描述:

我想知道是否有可能将日期转换为显示Oct 31 00:00:00 2013 GMT10-31-2013如何将SSL证书中的长日期转换为短日期| Unix KSH

我得到的日期如下:

NotBeforeDate=$(openssl x509 -noout -in ${CERTIFICATE} -dates | grep "notBefore") 

是我得到的日期是Oct 31 00:00:00 2013 GMT,我想将其转换为10-31-2013

有任何命令可以做到这一点?或者我必须手动完成这一切吗?

如果是这样,最好的方法是创建我自己的函数并发送长日期作为参数并返回一个短日期。

+0

你能否解释多一点是......来自'log'文件的日期或者什么? – Hackerman

+0

@Hackerman我从SSL证书中获得该日期并保存在一个变量中,只是想知道它是否可以转换为短日期。 –

+0

'保存在变量中',怎么样? – Hackerman

OpenSSL命令将使NotBeforeDate变量拥有价值(至少在bash的版本我使用):

notBefore=Oct 31 00:00:00 2013 GMT 

所以,首先我们需要删除notBefore=部分:

dateStr=${NotBeforeDate/notBefore=/} 

然后你可以使用date命令:

date --date="$dateStr" --utc +"%m-%d-%Y" 

​​选项告诉命令使用dateStr值,--utc表示日期以UTC(如由GMT部分指定)和+"%m-%d-%Y"将日期格式化为所需格式。

输出是:

2013年10月31日


PS:的选项可以根据自己的Linux版本的不同而不同。
您可以用date --helpman date检查所有可用的。

例如,长选项​​和--utc可能无法使用,但相当于短的版本可能是(只是举个例子,我不知道如果date命令有不同的UNIX版本之间的这种变化):

date -d "$dateStr" -u +"%m-%d-%Y" 

不幸的是,我没有完全相同的使用环境(unix中的ksh),但这应该起作用。


-d选项似乎是GNU特定的,所以如果它是不可用的,你必须手动解析字符串。假设dateStr具有价值Oct 31 00:00:00 2013 GMT,你可以运行:

printf '%s\n' "$dateStr" | awk '{ printf "%02d-%02d-%04d\n", (index("JanFebMarAprMayJunJulAugSepOctNovDec",$1)+2)/3, $2, $4}' 

输出是:

2013年10月31日

+0

我试过,但我认为日期版本是旧的,消息显示:'date:illegal选项' –

+0

@JavierSalas你有没有试过('--date'和'-d')?如果你输入'date --help',它显示了什么选项? – 2017-07-25 19:19:04

+0

它不工作,它使用遗留模式 –