2017-07-25 3 views
1

Je me demande s'il est possible de convertir une date comme show Oct 31 00:00:00 2013 GMT en 10-31-2013.Comment convertir une date longue en une date courte à partir de certificats SSL | Unix KSH

Je reçois la date comme suit:

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

La date à laquelle je reçois est Oct 31 00:00:00 2013 GMT et je voulais le convertir en 10-31-2013.

Y at-il une commande qui pourrait faire cela? Ou dois-je tout faire manuellement?

Si c'est le cas, le meilleur moyen est de créer ma propre fonction et d'envoyer la date longue en paramètre et de renvoyer une date courte.

+0

Pouvez-vous élaborer un peu plus ... est que date provenant d'un fichier 'log' ou quelque chose? – Hackerman

+0

@Hackerman Je reçois cette date du certificat SSL et est enregistrée dans une variable, je me demandais simplement si elle pourrait être convertie en date courte. –

+0

'enregistré dans une variable', comment? – Hackerman

Répondre

1

La commande OpenSSL fera la variable NotBeforeDate d'avoir la valeur (au moins dans la version bash j'utilise):

notBefore=Oct 31 00:00:00 2013 GMT 

Donc, nous devons d'abord enlever la partie notBefore=:

dateStr=${NotBeforeDate/notBefore=/} 

Ensuite, vous pouvez utiliser la commande date:

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

L'option --date indique à la commande d'utiliser la valeur dateStr, --utc indique que la date est en UTC (comme spécifié par GMT partie) et +"%m-%d-%Y" met en forme la date au format souhaité.

La sortie est:

10-31-2013


PS: les options peuvent varier en fonction de votre version de Linux.
Vous pouvez vérifier tous les disponibles avec date --help ou man date.

Par exemple, les options longues --date et --utc pourraient ne pas être disponibles, mais les versions courtes pourraient être équivalentes (juste un exemple, je ne sais pas si date commande a de telles variations entre les différentes versions unix):

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

Malheureusement, je n'ai pas exactement le même environnement que vous utilisez (ksh dans unix), mais cela devrait fonctionner.


Les options -d semble être GNU spécifique, donc si ce n'est pas disponible, vous devrez analyser manuellement la chaîne.En supposant que dateStr a la valeur Oct 31 00:00:00 2013 GMT, vous pouvez exécuter:

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

La sortie est:

10-31-2013

+0

J'ai essayé mais je pense que la date date est ancienne, le message affiché: 'date: illégal option' –

+0

@JavierSalas Avez-vous essayé les deux ('--date' et' -d')? Quelles options cela montre si vous tapez 'date --help'? –

+0

cela ne fonctionne pas aussi, il utilise le mode hérité –