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


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!


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');

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



5

JavaScript (ES6), 34 bytes

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

f=

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

console.log(f());


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

1
MySQL tienecurdate
Titus

4

Mathematica, 20 bytes

DateString@"ISODate"

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.


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!


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

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.


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$

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 

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.

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

Puede usar e[(matriz de pad) para 15 bytes:et3<{sY0e[}%'-*
Esolanging Fruit

@ Challenger5 eso es genial. Gracias
FrodCube



1

Oracle SQL, 46 bytes

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL

1

Powershell, 26 17 bytes

Date -f yyy-MM-dd

Gracias a @ConnorLSW por los 9 bytes.


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

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.


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


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

Óxido, 84 bytes

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

1

C #, 46 45 bytes

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

Salvó un byte gracias a @raznagul.


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


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!


¿No puedes eliminar algunos de esos espacios?
Timtech

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.