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. ]

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top