ksh - subtrai 5 minutos do horário atual

3

Eu preciso da data e hora do comando date minus 5 mins.

date:
29 Aug 2018 21:56:01

result:
29 Aug 2018 21:51:02

Eu tentei pesquisar na Internet / fóruns, mas a maioria envolveu a opção -d e o que eu tenho não suporta a opção -d .

Esse aqui funciona no Bash, mas eu preciso de algo que funcione no ksh.

$ printf "%(%d %h %Y %H:%M:%S)T\n" $(( $(printf "%(%s)T") - 5 * 60 ))
    
por WaldenSchmidt 03.09.2018 / 06:46

2 respostas

2

Você pode usar perl :

echo $(( $(printf "%(%s)T") - 5 * 60 )) | perl -lne 'print scalar localtime $_'

Ou em perl puro:

perl -le 'print scalar localtime(time()-5*60)'

Para formatar use strftime() :

perl -MPOSIX=strftime -le 'print strftime("%d %h %Y %H:%M:%S", localtime(time()-5*60))'
    
por 03.09.2018 / 07:52
6

bash na verdade copiou o formato %(...)T do ksh93, mas apenas um pequeno subconjunto.

Isso é muito mais poderoso no ksh93.

$ date; printf '%(%c)T\n' 'exactly five minutes ago'
Mon  3 Sep 08:08:32 BST 2018
Mon Sep  3 08:03:32 2018

bash suporta apenas épocas Unix épocas (ou -1 para agora , embora com versões recentes você também pode obter agora com um argumento ausente) enquanto o ksh93 suporta parente complexo (incluindo inglês como acima, crontab, at , ISO 8601: 2004) ou especificações de tempo absoluto (veja o dados de teste na fonte para alguns exemplos).

Em ksh93 , se você quiser passar um tempo de época, use um prefixo # :

$ printf '%(%c)T\n' '#0'
Thu Jan  1 00:00:00 1970

(embora aqui, aconteça para dar o tempo incorreto para mim em um fuso horário britânico em que o horário 0 era 1h )

    
por 03.09.2018 / 09:09