Qual'è la data?


26

Sfida

Stranamente, questo non è stato ancora fatto: mostra la data corrente.

Regole

Il formato della data che dovresti seguire è il seguente:

YYYY-MM-DD

Dove il mese e il giorno devono essere riempiti con zero se sono inferiori a 10.

Ad esempio, se il programma viene eseguito il 24 maggio 2017, dovrebbe essere generato

2017-05-24

La data può essere sempre in UTC o nella data locale.

È necessario gestire anni bisestili. cioè negli anni bisestili, febbraio ha 29 giorni ma 28 giorni in un anno normale.

vincente

Vince il codice più breve in byte.


14
Buon rappresentante 10k!
Rohan Jhunjhunwala,

1
E complimenti per il thread in più rapida crescita che abbia mai visto. : D
Tito,

@Titus Avresti dovuto vedere Hello, World! : D
Decadimento Beta

... e negli anni normali febbraio ha 31 giorni ovviamente
edc65

@ edc65 Avrei davvero dovuto sapere che febbraio è lungo 29 giorni negli anni bisestili: P
Decadimento beta

Risposte:


12

Bash , 16 7 byte

-8 byte grazie a Neil (e fergusq) (nessuna pipe richiesta per l'output)
-1 byte grazie a 12431234123412341234123 (utilizzare l'opzione integrata con flag -I!)

date -I

Provalo online!


2
Perché il echo $(...)?
Neil,

Non è necessario per l'output?
Jonathan Allan,

6
dateoutput già, l'output viene reindirizzato a stdout. Non è necessario reindirizzarlo echo, il quale lo convoglia a stdout. Provalo online!
fergusq,

Ma anche se vuoi davvero usarlo echo, almeno echo `date +%F`.
arte

5
perché non usare -I?
12431234123412341234123

10

PHP, 17 byte

<?=date('Y-m-d');

1
In realtà, YYYY-MM-DDThh:mm:ss+hh:mmè anche una data formattata ISO 8601 e questi 11 byte: <?=date(c);stampare l'intero materiale. ;)
Tito,

<?=strstr(date(c),T,1);per dare una piccola possibilità al formato c
Jörg Hülsermann,


7

Bash, 15 byte

printf '%(%F)T'

Esecuzione di esempio:

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

Provalo online!


Anche meglio di quanto ho trovato su SO, non era a conoscenza T.
Jonathan Allan,

@JonathanAllan, è stato aggiunto solo in Bash 4.2 e fino a Bash 4.3 ha richiesto un argomento da formattare.
arte

5

JavaScript (ES6), 34 byte

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

f=

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

console.log(f());


Hmm, stessa lunghezza di_=>new Date().toJSON().slice(0,10)
Steve Bennett,

4

SQLite, 13 caratteri

select date()

Bravo ragazzo, SQLite. Altri dialetti SQL in genere richiedono current_dateo date(now()).

Esecuzione di esempio:

bash-4.4$ sqlite3 <<< 'select date()'
2017-05-24

1
MySQL hacurdate
Titus,

4

Mathematica, 20 byte

DateString@"ISODate"

9
A volte mi imbatto in queste sfide non per vedere se Mathematica ha un built-in, ma per vedere di cosa si tratta
PunPun1000


3

Excel, 24 byte

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

Excel farà ancora un anno a 4 cifre con solo 3 y'.


2
I fogli di Google aggiungeranno il "). Excel no. Esso sarà aggiungere il )alla fine, ma solo dopo che richiede quindi richiederebbe ulteriore input dell'utente e guidare il punteggio di nuovo. 24 byte è probabilmente la risposta Excel più breve a meno che non consentiamo impostazioni internazionali che utilizzano il formato data ISO per impostazione predefinita e questo è in discussione .
Ingegnere Toast,

@EngineerToast Grazie. Lo aggiusterò.
Scott Milner,

2

R , 10 byte

Sys.Date()

Provalo online!


1
Poiché sys.dategià è una funzione, non è necessario aggiungere il (), quindi questo è solo 8 byte :)
JAD

@JarkoDubbeldam non è vero, il () è necessario
D. Nelson

@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/… Sys.Date è una funzione, quindi sarebbe sufficiente come soluzione. Non c'è bisogno di chiamarlo esplicitamente.
JAD

@JarkoDubbeldam è normalmente così, ma penso che dato che la sfida è "produrre la data corrente nel formato ISO-8601", in realtà ho bisogno di produrla.
Giuseppe,

1
Beh, sì, e l'ultima riga Sys.Datefa l'output per te. È simile a quando si ha una soluzione che inizia con function(x), non si termina nemmeno con una chiamata esplicita. È proprio il modo in cui vengono segnati i built-in.
JAD,


2

Alice , 9 byte

/oT\
@%;'

Provalo online!

Spiegazione

Lascerò l'esatto flusso di controllo come esercizio per il lettore, ma il codice linearizzato che viene eseguito in modalità Ordinale è:

%T'T%;o@

Ed ecco cosa fa:

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

Un modo in cui potrebbe essere golfabile è riutilizzare il %per terminare il programma in modalità Cardinale con una divisione per zero, ma l'unico layout che ho trovato è il seguente:

\;T
\%o'

Ma qui, in %realtà non termina il programma, perché premiamo 111 ( 'o) in anticipo, quindi non c'è mai una divisione per zero.

In linea di principio potrebbe anche essere possibile riutilizzare %per sbarazzarsi di ;, poiché il tentativo di dividere la data nel tempo semplicemente eliminerà l'ora.


2

SmileBASIC 3, 29 byte

SB ha una stringa di data integrata ... ma è nel formato sbagliato! Utilizza barre anziché trattini, non va bene. Inoltre, essendo il BASIC che si rispetti, non esiste una funzione di sostituzione globale. Immagino di doverlo fare da solo ...

D$=DATE$D$[4]="-
D$[7]="-
?D$

2

VBA, 5 25 byte

?Date imprevedibile, dipende dalle impostazioni della data breve del sistema

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

Produzione:

2017-05-25 

6
Questa risposta è estremamente volatile e, per sordità, non funzionerà sulla maggior parte dei computer poiché dipende interamente dal fatto che l'utente abbia il formato di data breve del sistema [in Impostazioni -> Data e ora in Win10] impostato su 'AAAA-MM-GG . The default format for this is M / D / YYYY` e quindi questo per l'output della Datefunzione è 5/25/2017. Per correggere ciò, la tua risposta dovrebbe essere racchiusa in una Formatchiamata.
Taylor Scott,

2
@TaylorScott a tal fine ?format(now,"yyyy-mm-dd")utilizzando nowè più cortadate
Greedo

1
@Greedo, è corretto. Questo è, per quanto ne sappia, il modo più breve per raggiungere questo obiettivo usando VBA
Taylor Scott,

1
@TaylorScott grazie per averlo sottolineato, non ero a conoscenza della dipendenza dalle impostazioni della data del sistema. Questo formato data è predefinito sul mio PC e nel mio paese in generale, quindi ero un po 'troppo fiducioso qui.
Maciej Lipinski,


1

QBIC , 33 byte

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

Spiegazione:

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 byte

et3<{sY0e[}%'-*

Provalo online!

-7 byte grazie a Challenger5.

Spiegazione:

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

È possibile utilizzare e[(pad array) per 15 byte:et3<{sY0e[}%'-*
Esolanging Fruit

@ Challenger5 è fantastico. Grazie
FrodCube,



1

Oracle SQL, 46 byte

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

1

Powershell, 26 17 byte

Date -f yyy-MM-dd

Grazie a @ConnorLSW per i 9 byte.


puoi risparmiare molto qui. date -f 'yyyy-MM-dd'
Colsw,

Grazie uomo. Sono nuovo di Powershell. Quindi, ho tentato la fortuna qui
Sivaprasath Vadivel,

@Shivaprasath V - nessuna preoccupazione, controlla questa discussione per un paio di post utili con i trucchi di golf PS di base se vuoi.
Colsw,

1

Rubino, 23 byte

Stampa l'ora locale.

p Time.now.strftime'%F'

1
p Time.now.to_s[0..9]
arte

1

MATLAB / Octave , 25 15 byte

datestr(now,29)

Provalo online!


La funzione integrata nowrestituisce la data corrente del sistema in uno strano formato seriale MATLAB.

datestrformatta il formato seriale strano in una stringa di un formato richiesto, che è in questo caso 'YYYY-mm-dd'. Si scopre che MATLAB ha un elenco di formati predefiniti per datestr. ISO8601 è uno di questi ed è rappresentato dal numero 29, che consente un risparmio di 10 byte.


1

Python 2 ,  53  40 byte

-10 byte grazie a Gábor Fekete (ISO-8601 è il formato predefinito per un oggetto data)

from datetime import*
print date.today()

Provalo online!

Come?

datetime.date.today()restituirà un datetime.dateoggetto contenente le informazioni sulla data locale.

printstamperà una rappresentazione in forma di stringa di quell'oggetto, questo chiamerà la __str__funzione dell'oggetto .

Dai documenti :

  • date.__str__(): Per a date d, str(d)è equivalente a d.isoformat().

  • date.isoformat(): Il ritorno di una stringche rappresenta la data in ISO 8601 formato ‘YYYY-MM-DD’. Ad esempio date(2002, 12, 4).isoformat() == '2002-12-04',.


1
import datetime;print datetime.date.today()questo è solo 43 byte e utilizza datetime. Perché la versione ancora più corta viene eliminata?
Gábor Fekete,

@ GáborFekete Grazie (penso che avresti dovuto davvero postare, è sufficientemente diverso). L'altra risposta è stata probabilmente cancellata perché non ha stampato la stringa correttamente formattata. Ho aggiunto una spiegazione sul perché questo funziona davvero (purché si includa il print). Ho salvato altri tre facendo (il male) import*.
Jonathan Allan,

Volevo, ma c'era un'altra soluzione che era anche più breve della mia ma è stata eliminata per qualche motivo.
Gábor Fekete,

... che ora è stato modificato per includere printmentre eliminato e non eliminato.
Jonathan Allan


1

Ruggine, 84 byte

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

1

C #, 46 45 byte

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

Salvataggio di un byte grazie a @raznagul.


2
Dove posso scaricare Sytem?
Erik the Outgolfer,

6
@EriktheOutgolfer È un wrapper personalizzato che ho creato attorno allo Systemspazio dei nomi perché ho continuato a fare lo stesso errore di battitura ...
TheLethalCoder

4
Sai cose che crei localmente non sono consentite su PPCG a meno che non sia pubblicato prima che venga posta la domanda. : P
Erik the Outgolfer,

1
@EriktheOutgolfer Damn, la prossima volta creerò anche un wrapper più corto ...
TheLethalCoder

1
Poiché non sono richiesti zero iniziali per l'anno, anche la stringa di formato "yyy-MM-dd"funzionerà.
raznagul,

1

Java 8, 26 32 byte

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

Formato fisso grazie a Kevin Cruijssen


Wow, Java in realtà è breve ... Non avrei mai pensato di vedere il giorno: D
Decadimento beta

@BetaDecay È breve, ma attualmente non conforme alle regole standard di codegolf. Dovrebbe essere una funzione anziché uno snippet e dovrebbero essere conteggiate anche le importazioni richieste. Quindi dovrebbe essere ()->java.time.LocalDate.now().toString()invece. Poi di nuovo, puoi giocare .toString()a golf +"", quindi diventa ()->java.time.LocalDate.now()+""in totale ( 32 byte ).
Kevin Cruijssen,

1

C ++ 14, 143 byte 139 byte

#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 mi ha fatto notare che non ho bisogno di tutti gli spazi

Mettermi alla prova!


Non riesci a rimuovere alcuni di quegli spazi?
Timtech,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.