Adição de horas e minutos no Solaris

0

Minha mesma pergunta aqui talvez encerrada (eu já recebi duas votações próximas). Espero que um de vocês possa ajudar aqui. Aqui está a minha pergunta:

Eu trabalho em um servidor solaris e a opção date -d não está lá. Não gdate também. Eu sei que muitas perguntas foram feitas relacionadas a isso, eu passei por quase todas elas. Mas eu não sei perl então eu não sei como modificar essas respostas com minha exigência.

Aqui está o que eu tenho que funciona no Linux:

date -d "$hr:$mi $duration minutes" +'%H%M'

em que $hr e $mi são horas e min, $duration está em minutos.

Quando eu corro assim no Linux, eu entendo isso:

date -d "23:28 60 minutes" +'%H%M'
0028

Quando executo isso em solaris , recebo:

date: illegal option -- d Usage: date [-u] ...

Existe uma solução awk aqui, pois meu perl é antigo?

Requote, estou tendo o mesmo problema que aqui , só que eu não Não pode se dar ao luxo de usar date -d . Estou aberto a qualquer solução em python ou perl , não precisa ser um liner.

    
por mathB 10.11.2017 / 15:11

3 respostas

2

há uma pequena dificuldade: splitting arround ":", há uma função awk: split(what,where,sep) .

Eu tentei em um solaris (é um comando de uma linha)

echo 23:28 60 |
 awk '{split($1,H,":") ; printf "%2d:%02d\n",H[1]+(H[2]+$2)/60, (H[2]+$2)%60 }'

onde

  • split ($ 1, H, ":") colocará 23 em H [1] e 28 em H [2]

use

echo 23:28 60 |
 awk '{split($1,H,":") ; printf "%2d:%02d\n",(H[1]+(H[2]+$2)/60)%24, (H[2]+$2)%60 }'

para ficar em 0-23 intervalo por hora. altere a string de formato em printf para "%02d:%02d\n" para ter uma% principal 0

    
por 10.11.2017 / 16:34
0

Com o awk, você pode fazer o seguinte:

awk -v dayt="2017 11 10 23 28 23" '{tmstmp=mktime(dayt)+60;print strftime("%M:%S",tmstmp)}' <<< ""

Passe a data e hora FULL para awk com o sinalizador -v e use o awk mktime para obter uma representação numérica da data / hora, adicionando 60 e depois strftime para converter a representação para o formato requerido.

    
por 10.11.2017 / 15:50
0

Isso é um pouco experimental, mas funciona com versões modernas de bash . Eu testei no CentOS 7 e no Fedora 26

#!/bin/bash

hr="23"
mi="28"
duration="60"

printf '%(%H%M)T\n' "$((-(19 * 60 * 60) + (hr * 60 * 60) + (mi * 60) + (duration * 60) ))"

O resultado é 0028 .

    
por 11.11.2017 / 10:52

Tags