Existem vários comandos no FreeBSD que usam a mesma API do GNU date
para inserir datas de idioma natural do usuário . Acabei de encontrar um que pode ser enganado para converter essa data em tempo de Unix:
/usr/sbin/fifolog_reader -B 'last sunday' /dev/null 2>&1 |
sed 's/^From[[:blank:]]*\([0-9]*\).*//p'
(note que pelo menos no FreeBSD 9.1-RELEASE-p2 onde eu experimentei isso, ele parece funcionar de maneira confiável se você estiver em um fuso horário UTC e as especificações de data que ele reconhece não são necessariamente as mesmas reconhecidas por Data GNU).
Note que alguns shells têm essa capacidade incorporada.
ksh93
:
if (( timestamp < $(printf '%(%s)T' 'last sunday') )); then
zsh
:
autoload calendar_scandate
calendar_scandate 'last sun'
if (( timestamp < REPLY)); then...
Ou você pode usar perl
e Date::Manip
se instalado:
last_sun=$(perl -MDate::Manip -e 'print UnixDate("last sunday","%s")')
if [ "$timestamp" -lt "$last_sun" ]; then...
Ou:
if perl -MDate::Manip -e 'exit 1 unless $ARGV[0] < UnixDate("last sunday","%s")
' "$timestamp"; then....
Se o objetivo for verificar os registros de data e hora do arquivo, observe que o FreeBSD find
suporta:
find file -prune -newermt 'last sunday'
Neste caso, se você quiser a hora do início desta semana (semanas começando no domingo), você pode fazer:
week_start=$(($(date '+%s - 86400*%w - 3600*%H - 60*%M - %S')))
Isso deve funcionar tanto no GNU quanto no FreeBSD (ou qualquer sistema em que %s
seja suportado).
Em fusos horários com horário de verão, isso será desligado por uma hora em torno da mudança de / para o horário de verão.