如何将SSL证书中的长日期转换为短日期| Unix KSH
我想知道是否有可能将日期转换为显示Oct 31 00:00:00 2013 GMT
到10-31-2013
。如何将SSL证书中的长日期转换为短日期| Unix KSH
我得到的日期如下:
NotBeforeDate=$(openssl x509 -noout -in ${CERTIFICATE} -dates | grep "notBefore")
是我得到的日期是Oct 31 00:00:00 2013 GMT
,我想将其转换为10-31-2013
。
有任何命令可以做到这一点?或者我必须手动完成这一切吗?
如果是这样,最好的方法是创建我自己的函数并发送长日期作为参数并返回一个短日期。
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 --help
或man 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日
我试过,但我认为日期版本是旧的,消息显示:'date:illegal选项' –
@JavierSalas你有没有试过('--date'和'-d')?如果你输入'date --help',它显示了什么选项? – 2017-07-25 19:19:04
它不工作,它使用遗留模式 –
你能否解释多一点是......来自'log'文件的日期或者什么? – Hackerman
@Hackerman我从SSL证书中获得该日期并保存在一个变量中,只是想知道它是否可以转换为短日期。 –
'保存在变量中',怎么样? – Hackerman