2017-07-25 78 views
1

我想知道是否有可能將日期轉換爲顯示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

回答

1

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

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

相關問題