Estoy interesado en generar una representación del trimestre actual, así como el trimestre del mes anterior.
Si hoy es el 1 de enero de 2012, me gustaría obtener
2012q1
y
2011q4
como las respectivas salidas.
command-line
date
smokris
fuente
fuente
%m
da09
qué bash intenta interpretar como octal debido al 0 inicial, por lo que arroja un error que dice09: value too great for base (error token is "09")
. Esto se puede solucionar deshabilitando el relleno 0 cambiando%m
a%-m
.Usa mis dateutils :
Las banderas
%q
y%Q
son específicas de dateutils y devuelven el trimestre como número o en el formularioQ<NUMBER>
.fuente
dconv now -f%Y%Q | tr Q q
si realmente necesitas que Q esté en minúsculas. (PD: estamos empacando esto en Fedora condate
el prefijo en lugar ded
"dateconv
".)Todas las soluciones que se dividen entre cuatro fallan, por ejemplo noviembre:
Las matemáticas correctas serían:
Y como tal, el trimestre del mes actual y anterior sería:
Son solo doce valores para verificar, realmente ...
fuente
Probablemente, no hay una solución directa.
Podrías
awk
evitar tantas contratiempos.Una
perl
solución sería más limpio peroperl
yDateTime
son un requisito previo pesado.fuente
date
dos veces.Divida el formato con fecha, calcule con awk, formatee con printf:
Solo fecha y fiesta:
fuente
2012q0
que es incorrecta.Una alternativa, más como curiosidad. Si GNU
awk
está involucrado,date
no es necesario:fuente
Llame
date
para recuperar el año y mes actuales, y haga el resto con la aritmética en el shell.fuente
Trimestre del año para este mes
Año-Trimestre para ayer-mes
fuente
Matemáticas básicas para este trimestre y el trimestre del mes pasado:
El script usa las siguientes partes:
fuente
Ahora existe el
%q
formato para mostrar esta información.Del registro de lanzamiento de coreutils-8.26 del 30 de noviembre de 2016:
¡Y sí, funciona!
fuente
Si desea el trimestre fiscal de 13 semanas que se basa en el calendario semanal ISO, entonces el nuevo práctico% q no va a funcionar, lamentablemente. Aquí hay una versión de la solución sin fecha de @manatwork con awk / strftime.
El último pequeño bit ternario maneja los años de la semana de salto ISO donde el último trimestre tiene 14 semanas.
fuente