Imprime datas específicas em um formato específico

2

Eu gostaria de escrever um script que impressa a data no seguinte formato:

20120205_16
(year)(month)(day)_(24 hour)

, então o comando para fazer isso na data atual é:

date +'20%y%m%d_%H'

O que eu gostaria de fazer é imprimir cada data como esta (usando um loop for ou algo assim) de uma data especificada para outra. Por exemplo:

20120205_16 -> 20120305_18 would be:

20120205_16
20120205_17
20120205_18
...
20120305_17
20120305_18

É possível fazer isso facilmente com data ou outro método?

    
por Fantastic Mr Fox 20.07.2012 / 09:01

1 resposta

3

Imprime todas as datas entre uma duração de tempo

  1. Eu pegaria sua data1 e data2 e as converteria em carimbos de data / hora
  2. Então eu investigaria: o que é convertido por 1 hora para o registro de data e hora.
  3. E escreva um loop para o timestamp (date1) para timestamp (date2)

dentro do loop eu adicionaria o registro de data e hora passo a passo (1 hora), converteria o novo timestamp de volta no formato de data / hora preferido e imprimi-lo até que o loop terminasse. #

#!/bin/bash
# by user85321 @ ask ubuntu
# call: ./script.sh 20120205_16 20120205_16 20120305_18

# STEP 1:
# set userdefined Dateformat to normal
d1=$(echo "" | sed 's/_/ /g')
d2=$(echo "" | sed 's/_/ /g')

# set normalized dates to timestamps
t1=$(date --utc --date "$d1" +%s)
t2=$(date --utc --date "$d2" +%s)

# STEP 2:
# time increment, 1h = 3600 s
h=3600

# STEP 3:
if [ $t2 -gt $t1 ]
then
    for i in $(seq $t1 $h $(($t2-$h)))
    do  
        # take this and do what you want to do ;o)      
        echo $(date --date="@$i" "+%Y%m%d_%H")
    done
fi

Meu bash imprime exatamente essa lista, o que você descreveu. Então, está feito. Eu acho que algumas rachaduras fariam mais curto / melhor, mas funciona ...

boa sorte

    
por user85321 24.08.2012 / 21:30