¿Cómo puedo cambiar el formato de una fecha desde la línea de comando?
-
07-07-2019 - |
Pregunta
¿Cuál es la forma más rápida de convertir una fecha en un formato, digamos
2008-06-01
a una fecha en otro formato, digamos
Dom 1 de junio de 2008
El bit importante es en realidad el 'Sol' porque, dependiendo del nombre del día, es posible que necesite manipular otras cosas, de una manera no determinista. Estoy ejecutando GNU bash, versión 3.2.17 (1) -release (i386-apple-darwin9.0).
[Antecedentes: la razón por la que quiero hacerlo desde la línea de comandos, es que lo que realmente quiero es escribirlo en un comando TextMate ... Es una tarea molesta que tengo que hacer todo el tiempo en textMate. ]
Solución
$ date -d '2005-06-30' +'%a %F'
Thu 2005-06-30
Vea man date
para otras opciones de formato.
Esta opción está disponible en Linux, pero no en Darwin. En Darwin, puede usar la siguiente sintaxis:
date -j -f "%Y-%m-%d" 2006-06-30 +"%a %F"
El argumento -f especifica el formato de entrada y el argumento + especifica el formato de salida.
Como se señala en otro póster a continuación, sería prudente usar% u (día numérico de la semana) en lugar de% a para evitar problemas de localización.
Otros consejos
La lectura de la página de manual de fecha (1) habría revelado:
-j Do not try to set the date. This allows you to use the -f flag in addition to the + option to convert one date format to another.
Gracias por ese sgm. Así que solo puedo volver a referirme a él -
date -j -f "%Y-%m-%d" "2008-01-03" +"%a%e %b %Y"
^ ^ ^
parse using | output using
this format | this format
|
date expressed in
parsing format
Thu 3 Jan 2008
Gracias.
date -d yyyy-mm-dd
Si desea tener más control sobre el formato, también puede agregarlo así:
date -d yyyy-mm-dd +%a
para obtener la parte del Sol que dices que quieres
date -d ...
no parece cortarlo, ya que aparece un error de uso:
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
Estoy ejecutando GNU bash, versión 3.2.17 (1) -release (i386-apple-darwin9.0), y en lo que respecta al hombre, date -d es solo para
-d dst Set the kernel's value for daylight saving time. If dst is non-
zero, future calls to gettimeofday(2) will return a non-zero for
tz_dsttime.
Si solo está buscando obtener el día de la semana, no intente hacer coincidir las cadenas. Eso se rompe cuando cambia la configuración regional. El formato % u
le proporciona el número de día:
$ date -j -f "%Y-%m-%d" "2008-01-03" +"%u"
4
Y de hecho, eso fue un jueves. Puede usar ese número para indexar en una matriz que tiene en su programa, o simplemente usar el número mismo.
Consulte las páginas de manual de fecha y horario de trabajo para obtener más detalles. Sin embargo, la página de manual de fecha en OS X es incorrecta, ya que no enumera estas opciones que funcionan.