¿Cuál es la fecha?

26

Reto

Extrañamente, esto aún no se ha hecho: muestra la fecha actual.

Reglas

El formato de fecha que debe seguir es el siguiente:

YYYY-MM-DD

Donde el mes y el día deben rellenarse con ceros si son menores de 10.

Por ejemplo, si el programa se ejecuta el 24 de mayo de 2017, debería generar

2017-05-24

La fecha puede estar siempre en UTC o en la fecha local.

Debes manejar saltos años. es decir, en años bisiestos, febrero tiene 29 días pero 28 días en un año normal.

Victorioso

El código más corto en bytes gana.

Decaimiento Beta
fuente
14
¡Feliz representante de 10k!
Rohan Jhunjhunwala
1
Y felicidades por el hilo de más rápido crecimiento que he visto. : D
Titus
@Titus ¡Deberías haber visto Hello, World! : D
Beta Decay
... y en años normales febrero tiene 31 días, por supuesto
edc65
@ edc65 Realmente debería haber sabido que febrero dura 29 días en los años bisiestos: P
Beta Decay

Respuestas:

12

Bash , 16 7 bytes

-8 bytes gracias a Neil (y fergusq) (no se requiere tubería para la salida)
-1 byte gracias a 12431234123412341234123 (¡use la opción integrada con bandera -I!)

date -I

Pruébalo en línea!

Jonathan Allan
fuente
2
¿Por qué el echo $(...)?
Neil
¿No lo necesita para salir?
Jonathan Allan
66
datesalidas ya, la salida se canaliza a stdout. No necesita canalizarlo echo, lo que lo canaliza a stdout. Pruébalo en línea!
fergusq
Pero incluso si realmente quieres usar echo, al menos echo `date +%F`.
manatwork
55
¿Por qué no usar -I?
12431234123412341234123
10

PHP, 17 bytes

<?=date('Y-m-d');
Titus
fuente
1
En realidad, YYYY-MM-DDThh:mm:ss+hh:mmtambién es una fecha con formato ISO 8601 y estos 11 bytes: <?=date(c);imprime todo. ;)
Tito
<?=strstr(date(c),T,1);darle una pequeña oportunidad al formato c
Jörg Hülsermann
7

Bash, 15 bytes

printf '%(%F)T'

Ejecución de muestra:

bash-4.4$ printf '%(%F)T'
2017-05-24

Pruébalo en línea!

hombre trabajando
fuente
Incluso mejor de lo que encontré en SO, no estaba al tanto T.
Jonathan Allan
@JonathanAllan, se agregó solo en Bash 4.2 y hasta Bash 4.3 requirió un argumento para formatear.
manatwork
5

JavaScript (ES6), 34 bytes

_=>new Date().toJSON().split`T`[0]

f=

_=>new Date().toJSON().split`T`[0]

console.log(f());

Johan Karlsson
fuente
Hmm, misma longitud que_=>new Date().toJSON().slice(0,10)
Steve Bennett
4

SQLite, 13 caracteres

select date()

Buen chico, SQLite. Otros dialectos de SQL generalmente necesitan current_dateo date(now()).

Ejecución de muestra:

bash-4.4$ sqlite3 <<< 'select date()'
2017-05-24
hombre trabajando
fuente
1
MySQL tienecurdate
Titus
4

Mathematica, 20 bytes

DateString@"ISODate"
J42161217
fuente
99
A veces me enfrento a estos desafíos no para ver si Mathematica tiene una función incorporada, sino para ver qué es
PunPun1000
3

Excel, 24 bytes

=TEXT(NOW(),"yyy-mm-dd")

Excel seguirá haciendo un año de 4 dígitos con solo 3 y's.

Scott Milner
fuente
2
Las hojas de Google agregarán el "). Excel no lo hará. Se va a añadir el )de la final, pero sólo después de que le pide que lo que requeriría la entrada del usuario adicional y conducir la puntuación de nuevo. 24 bytes es probablemente la respuesta más breve de Excel a menos que permitamos la configuración regional utilizando el formato de fecha ISO de forma predeterminada y eso está en debate .
Engineer Toast
@EngineerToast Gracias. Lo arreglaré
Scott Milner
2

R , 10 bytes

Sys.Date()

Pruébalo en línea!

Giuseppe
fuente
1
Como sys.dateya es una función, no tiene que agregar el (), por lo que solo son 8 bytes :)
JAD
@JarkoDubbeldam no es cierto, el () es necesario
D. Nelson
@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/… Sys.Date es una función, por lo que sería suficiente como solución. No es necesario llamarlo explícitamente.
JAD
@JarkoDubbeldam ese es normalmente el caso, pero creo que dado que el desafío es 'mostrar la fecha actual en formato ISO-8601', realmente necesito hacerlo.
Giuseppe
1
Bueno, sí, y la última línea de Sys.Datehace la salida por ti. Es similar a cuando tiene una solución que comienza con function(x), tampoco termina con una llamada explícita. Es solo cómo se puntúan los incorporados.
JAD
2

Lua, 18 personajes

print(os.date"%F")

Ejecución de muestra:

bash-4.4$ lua -e 'print(os.date"%F")'
2017-05-24

Pruébalo en línea!

hombre trabajando
fuente
2

Alice , 9 bytes

/oT\
@%;'

Pruébalo en línea!

Explicación

Dejaré el flujo de control exacto como ejercicio para el lector, pero el código linealizado que se ejecuta en modo Ordinal es:

%T'T%;o@

Y esto es lo que hace:

%   Split an implicit empty string around an implicit empty string. Really doesn't
    do anything at all.
T   Push the current datetime as a string like "2017-05-24T20:53:08.150+00:00"
'T  Push "T".
%   Split the datetime string around the "T", to separate the date from the time.
;   Discard the time.
o   Output the date.
@   Terminate the program.

Una forma en que esto podría ser golfable es reutilizar %para terminar el programa en modo Cardinal con una división por cero, pero el único diseño que he encontrado es el siguiente:

\;T
\%o'

Pero aquí, el %realmente no termina el programa, porque presionamos 111 ( 'o) de antemano para que nunca haya una división por cero.

En principio, también podría ser posible reutilizar %para deshacerse de él ;, ya que tratar de dividir la fecha alrededor de la hora simplemente descartará la hora.

Martin Ender
fuente
2

SmileBASIC 3, 29 bytes

SB tiene una cadena de fecha integrada ... ¡pero está en el formato incorrecto! Utiliza barras en lugar de guiones, no sirve. Además, al ser el BASIC que se respeta a sí mismo, no existe una función de reemplazo global. Supongo que tengo que hacerlo yo mismo ...

D$=DATE$D$[4]="-
D$[7]="-
?D$
caracol_
fuente
2

VBA, 5 25 bytes

?Date impredecible, dependiente de la configuración de fecha corta del sistema

?Format(Now,"yyyy-mm-dd")

Salida:

2017-05-25 
Maciej Lipinski
fuente
66
Esta respuesta es extremadamente volátil y, por defecto, no funcionará en la mayoría de las computadoras, ya que depende completamente de que el usuario tenga su formato de fecha corta del sistema [en configuración -> Fecha y hora en Win10] configurado en 'AAAA-MM-DD . The default format for this is M / D / YYYY` y, por lo tanto, esto para la salida de la Datefunción es 5/25/2017. Para corregir esto, su respuesta debería estar envuelta en una Formatllamada.
Taylor Scott
2
@TaylorScott a tal fin ?format(now,"yyyy-mm-dd")el uso nowes más corta quedate
Greedo
1
@Greedo, eso es correcto. Esto es, que yo sepa, el camino más corto para alcanzar este objetivo utilizando VBA
Taylor de Scott
1
@ TaylorScott gracias por señalar esto, no estaba al tanto de la dependencia de la configuración de la fecha del sistema. Este formato de fecha es el predeterminado en mi PC y en mi país en general, por lo que estaba un poco demasiado confiado aquí.
Maciej Lipinski
1

QBIC , 33 bytes

B=_D?_sB,-4|+@-`+_sB,2|+A+_sB,4,2

Explicación:

B=_D        Assign the system's date to B$
            This is in American mm-dd-yyyy format, so we'll need to do some reformatting
?_sB,-4|    PRINT substring B, take 4 chars from the right
 +@-`         plus the string literal "-", now A$
 +_sB,2|      plus the leftmost two chars
 +A           and A$ again
 +_sB,4,2     plus the middle part.
Steenbergh
fuente
1

CJam , 22 15 bytes

et3<{sY0e[}%'-*

Pruébalo en línea!

-7 bytes gracias a Challenger5.

Explicación:

et                       Get array with [year,month,day,stuff...]
  3<                     Slice array to get [y,m,d] 
    {                    For each item do:
     s                     To string
      Y0e[                 add a 0 to the beginning of the string if it is shorter than 2 chars.
          }%             End for each
            '-*          Join the array with "-" as a separator
FrodCube
fuente
Puede usar e[(matriz de pad) para 15 bytes:et3<{sY0e[}%'-*
Esolanging Fruit
@ Challenger5 eso es genial. Gracias
FrodCube
1

Python 2, 40 bytes

from datetime import*;print date.today()
Wondercricket
fuente
1

Oracle SQL, 46 bytes

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL
Khaled.K
fuente
1

Powershell, 26 17 bytes

Date -f yyy-MM-dd

Gracias a @ConnorLSW por los 9 bytes.

Sivaprasath Vadivel
fuente
Puedes ahorrar mucho aquí. date -f 'yyyy-MM-dd'
colsw
Gracias hombre. Soy nuevo en Powershell. Entonces, probé suerte aquí
Sivaprasath Vadivel
@Shivaprasath V: no se preocupe, consulte este hilo para ver un par de publicaciones útiles con los trucos de golf más básicos de PS si lo desea.
colsw
1

Ruby, 23 bytes

Imprime la hora local.

p Time.now.strftime'%F'
caracol_
fuente
1
p Time.now.to_s[0..9]
manatwork
1

MATLAB / Octave , 25 15 bytes

datestr(now,29)

Pruébalo en línea!


La función incorporada nowdevuelve la fecha actual del sistema en un formato serial MATLAB extraño.

datestrformatea el extraño formato de serie en una cadena de un formato solicitado, que es en este caso 'YYYY-mm-dd'. Resulta que MATLAB tiene una lista de formatos predefinidos para datestr. ISO8601 es uno de ellos y está representado por el número 29, que permite un ahorro de 10 bytes.

Tom Carpenter
fuente
1

Pitón 2 ,  53  40 bytes

-10 bytes gracias a Gábor Fekete (ISO-8601 es el formato predeterminado para un objeto de fecha)

from datetime import*
print date.today()

Pruébalo en línea!

¿Cómo?

datetime.date.today()devolverá un datetime.dateobjeto que contiene la información de la fecha local.

print imprimirá una representación de cadena de ese objeto, esto llamará al objeto __str__ función .

De los documentos :

  • date.__str__(): Para a date d, str(d)es equivalente a d.isoformat().

  • date.isoformat(): Devolver una stringque representa la fecha en la norma ISO 8601 de formato, ‘YYYY-MM-DD’. Por ejemplo, date(2002, 12, 4).isoformat() == '2002-12-04'.

Jonathan Allan
fuente
1
import datetime;print datetime.date.today()esto es solo 43 bytes y usa datetime. ¿Por qué se elimina la versión aún más corta?
Gábor Fekete
@ GáborFekete Gracias (creo que realmente deberías haber publicado, es lo suficientemente diferente). La otra respuesta probablemente se eliminó porque no imprimió la cadena con el formato correcto. He agregado una explicación sobre por qué esto realmente funciona (siempre que uno incluya el print). Salvó a otros tres haciendo (el mal) import*.
Jonathan Allan
Quería hacerlo, pero había otra solución que era incluso más corta que la mía, pero fue eliminada por alguna razón.
Gábor Fekete
... que ahora ha sido editado para incluir el printtiempo eliminado y luego no borrado.
Jonathan Allan
1

Cristal , 30 bytes 24 bytes 21 bytes

-6 gracias a Nick Clifford

-3 de mirar la respuesta de snail_ en Ruby

p Time.now.to_s("%F")

Pruébalo en línea!

Tito Lucrecio
fuente
2
Estoy bastante seguro de que puedes usar %F. Además, ¡es bueno ver a Crystal en PPCG!
Nick Clifford
1
@ Nick Clifford Lo vi en tio y pensé que tenía un nombre genial.
TitusLucretius
1

Óxido, 84 bytes

extern crate chrono;fn main(){print!("{}",chrono::Local::now().format("%Y-%m-%d"));}
Chad Baxter
fuente
1

C #, 46 45 bytes

_=>System.DateTime.Now.ToString("yyy-MM-dd");

Salvó un byte gracias a @raznagul.

TheLethalCoder
fuente
2
¿Dónde descargo Sytem?
Erik the Outgolfer
66
@EriktheOutgolfer Es un contenedor personalizado que creé alrededor del Systemespacio de nombres porque seguía haciendo el mismo error tipográfico ...
TheLethalCoder
44
Sabes que las cosas que creas localmente no están permitidas en PPCG a menos que se publiquen antes de que se haga la pregunta. : P
Erik the Outgolfer
1
@EriktheOutgolfer Maldición, la próxima vez también crearé un contenedor más corto ...
TheLethalCoder
1
Como no se requieren ceros iniciales para el año, la cadena de formato "yyy-MM-dd"también funcionará.
raznagul
1

Java 8, 26 32 bytes

()->java.time.LocalDate.now()+""

Formato fijo gracias a Kevin Cruijssen

jaxad0127
fuente
Wow, Java es realmente corto ... Nunca hubiera pensado que vería el día: D
Beta Decay
@BetaDecay Es breve, pero actualmente no cumple con las reglas estándar de codegolf. Debería ser una función en lugar de un fragmento, y las importaciones requeridas también deberían contarse. Entonces debería ser ()->java.time.LocalDate.now().toString()en su lugar. Por otra parte, puede jugar .toString()al golf +"", por lo que se convierte ()->java.time.LocalDate.now()+""en total ( 32 bytes ).
Kevin Cruijssen
1

C ++ 14, 143 bytes 139 bytes

#include <cstdio>
#include <time.h>
int main (){time_t t;char D[11];time(&t);strftime(D,sizeof D,"%Y-%m-%d",localtime(&t));printf("%s",D);}

Timtech me señaló que no necesito todos los espacios

¡Pruebame!

nobbele
fuente
¿No puedes eliminar algunos de esos espacios?
Timtech
1

Rápido, 13 bytes

print(Date())
Dimitrie-Toma Furdui
fuente