Jaka jest data?

26

Wyzwanie

Co dziwne, nie zostało to jeszcze zrobione: wyświetl aktualną datę.

Zasady

Format daty, którego należy przestrzegać, jest następujący:

YYYY-MM-DD

Gdzie miesiąc i dzień powinny być uzupełnione zerami, jeśli są mniejsze niż 10.

Na przykład, jeśli program zostanie uruchomiony 24 maja 2017 r., Powinien zostać wygenerowany

2017-05-24

Data może być zawsze w UTC lub w dacie lokalnej.

Musisz poradzić sobie z latami przestępnymi. tj. w latach przestępnych luty ma 29 dni, ale 28 dni w roku normalnym.

Zwycięski

Najkrótszy kod w bajtach wygrywa.

Rozpad beta
źródło
14
Happy 10k powtórzeń!
Rohan Jhunjhunwala
1
Gratuluję najszybciej rozwijającego się wątku, jaki kiedykolwiek widziałem. : D
Tytus
@Titus Powinieneś był zobaczyć Hello, World! : D
Beta Decay
... aw normalnych latach luty ma oczywiście 31 dni
edc65
@ edc65 Naprawdę powinienem był wiedzieć, że luty upłynął 29 dni w latach przestępnych: P
Rozpad

Odpowiedzi:

12

Bash , 16 7 bajtów

-8 bajtów dzięki Neilowi ​​(i fergusq) (nie jest wymagana rura do wyjścia)
-1 bajtów dzięki 12431234123412341234123 (użyj wbudowanej opcji z flagą -I!)

date -I

Wypróbuj online!

Jonathan Allan
źródło
2
Dlaczego echo $(...)?
Neil
Czy nie potrzebuje go do generowania?
Jonathan Allan
6
datewyjścia już, wyjście jest przesyłane do standardowego wyjścia. Nie musisz go potokować echo, co doprowadza do stdout. Wypróbuj online!
fergusq
Ale nawet jeśli naprawdę chcesz użyć echo, to przynajmniej echo `date +%F`.
manatwork
5
dlaczego nie użyć -I?
12431234123412341234123
10

PHP, 17 bajtów

<?=date('Y-m-d');
Tytus
źródło
1
W rzeczywistości YYYY-MM-DDThh:mm:ss+hh:mmjest to również data sformatowana w standardzie ISO 8601 i te 11 bajtów: <?=date(c);wydrukuj całość. ;)
Tytus
<?=strstr(date(c),T,1);dać małą szansę formatowi c
Jörg Hülsermann
7

Bash, 15 bajtów

printf '%(%F)T'

Przykładowy przebieg:

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

Wypróbuj online!

człowiek w pracy
źródło
Nawet lepiej niż znalazłem na SO, nie był świadomy T.
Jonathan Allan
@JonathanAllan, został dodany tylko w wersji Bash 4.2 i do wersji Bash 4.3 wymagał argumentu do sformatowania.
manatwork
5

JavaScript (ES6), 34 bajty

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

f=

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

console.log(f());

Johan Karlsson
źródło
Hmm, taka sama długość jak_=>new Date().toJSON().slice(0,10)
Steve Bennett
4

SQLite, 13 znaków

select date()

Dobry chłopak, SQLite. Inne dialekty SQL zazwyczaj muszą być albo current_datealbo date(now()).

Przykładowy przebieg:

bash-4.4$ sqlite3 <<< 'select date()'
2017-05-24
człowiek w pracy
źródło
1
MySQL macurdate
Tytusa
4

Mathematica, 20 bajtów

DateString@"ISODate"
J42161217
źródło
9
Czasami
wchodzę
4

Perl 6 ,  14  12 bajtów

Date.today.say

Spróbuj

now.Date.say

Spróbuj

Brad Gilbert b2gills
źródło
3

Excel, 24 bajty

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

Excel nadal będzie robił 4-cyfrowy rok z tylko 3 y.

Scott Milner
źródło
2
Arkusze Google dodadzą "). Excel nie chce. Doda to znak )na końcu, ale dopiero po wyświetleniu monitu, aby wymagało to dodatkowego wkładu użytkownika i ponownie podniosło wynik. 24 bajty to prawdopodobnie najkrótsza odpowiedź programu Excel, chyba że zezwalamy na ustawienia regionalne domyślnie korzystające z formatu daty ISO, co jest przedmiotem dyskusji .
Inżynier Toast
@EngineerToast Thanks. Naprawię to.
Scott Milner,
2

R , 10 bajtów

Sys.Date()

Wypróbuj online!

Giuseppe
źródło
1
Ponieważ sys.datejest już funkcją, nie musisz dodawać (), więc jest to tylko 8 bajtów :)
JAD
@JarkoDubbeldam nie prawdziwe, () jest to konieczne
D. Nelson
@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/… Sys.Date jest funkcją, więc wystarczyłoby jako rozwiązanie. Nie ma potrzeby jawnego nazywania tego.
JAD
@JarkoDubbeldam tak jest zwykle, ale myślę, że ponieważ wyzwaniem jest „wydrukować bieżącą datę w formacie ISO-8601”, tak naprawdę muszę ją wydrukować.
Giuseppe
1
No tak, a ostatnia linijka Sys.Daterobi dla ciebie wyjście. Podobnie jest w przypadku rozwiązania, które zaczyna się od function(x), ale nie kończy się to również jawnym wywołaniem. Tak właśnie są oceniane punkty wbudowane.
JAD
2

Lua, 18 znaków

print(os.date"%F")

Przykładowy przebieg:

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

Wypróbuj online!

człowiek w pracy
źródło
2

Alice , 9 bajtów

/oT\
@%;'

Wypróbuj online!

Wyjaśnienie

Dokładny przepływ kontroli pozostawiam czytelnikowi jako ćwiczenie, ale zlinearyzowany kod uruchamiany w trybie porządkowym to:

%T'T%;o@

A oto, co robi:

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

Jednym ze sposobów, w jakie może to być możliwe, jest ponowne użycie programu %do zakończenia programu w trybie kardynalnym z dzieleniem przez zero, ale jedyny wymyślony przeze mnie układ jest następujący:

\;T
\%o'

Ale tutaj %tak naprawdę nie kończy programu, ponieważ naciskamy 111 ( 'o) wcześniej, więc nigdy nie ma podziału na zero.

Zasadniczo może być również możliwe ponowne użycie, %aby się go pozbyć ;, ponieważ próba podzielenia daty wokół godziny po prostu ją odrzuci.

Martin Ender
źródło
2

SmileBASIC 3, 29 bajtów

SB ma wbudowany ciąg daty ... ale ma niewłaściwy format! Używa ukośników zamiast myślników, nic dobrego. Ponadto, ponieważ jest to szanujący się język BASIC, nie ma globalnej funkcji zamiany. Chyba muszę to zrobić sam ...

D$=DATE$D$[4]="-
D$[7]="-
?D$
ślimak_
źródło
2

VBA, 5 25 bajtów

?Date nieprzewidywalny, zależny od ustawień krótkiej daty w systemie

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

Wydajność:

2017-05-25 
Maciej Lipiński
źródło
6
Ta odpowiedź jest wyjątkowo niestabilna i z powodu niesłyszących nie będzie działać na większości komputerów, ponieważ zależy ona całkowicie od tego, czy użytkownik ma w systemie krótki format daty [w ustawieniach -> Data i czas w Win10] ustawiony na „RRRR-MM-DD . The default format for this is M / D / YYYY`, a więc to dla wyjścia Datefunkcji jest 5/25/2017. Aby to skorygować, odpowiedź musiałaby być zapakowana w Formatrozmowę.
Taylor Scott,
2
@TaylorScott w tym celu ?format(now,"yyyy-mm-dd")użycie nowjest krótsze niżdate
Greedo
1
@Greedo, to prawda. Jest to, według mojej wiedzy, najkrótsza droga do osiągnięcia tego celu przy użyciu VBA
Taylor Scott
1
@TaylorScott dzięki za zwrócenie na to uwagi, nie byłem świadomy zależności od ustawień daty systemowej. Ten format daty jest domyślny na moim komputerze i ogólnie w moim kraju, więc byłem tu zbyt pewny siebie.
Maciej Lipiński
1

QBIC , 33 bajty

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

Wyjaśnienie:

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
źródło
1

CJam , 22 15 bajtów

et3<{sY0e[}%'-*

Wypróbuj online!

-7 bajtów dzięki Challenger5.

Wyjaśnienie:

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
źródło
Możesz użyć e[(tablica padów) dla 15 bajtów:et3<{sY0e[}%'-*
Esolanging Fruit
@ Challenger5, to fajne. Dzięki
FrodCube
1

Python 2, 40 bajtów

from datetime import*;print date.today()
Wondercricket
źródło
1

Oracle SQL, 46 bajtów

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL
Khaled.K
źródło
1

PowerShell, 26 17 bajtów

Date -f yyy-MM-dd

Dzięki @ConnorLSW za 9 bajtów.

Sivaprasath Vadivel
źródło
tutaj możesz dużo zaoszczędzić. date -f 'yyyy-MM-dd'
colsw
Dzięki stary. Jestem nowy w Powershell. Próbowałem tutaj szczęścia
Sivaprasath Vadivel,
@Shivaprasath V - nie martw się, sprawdź ten wątek, aby znaleźć kilka pomocnych postów z bardziej podstawowymi sztuczkami PS golfa, jeśli chcesz.
colsw
1

Rubinowy, 23 bajty

Drukuje czas lokalny.

p Time.now.strftime'%F'
ślimak_
źródło
1
p Time.now.to_s[0..9]
manatwork
1

MATLAB / Octave , 25 15 bajtów

datestr(now,29)

Wypróbuj online!


Wbudowana funkcja nowzwraca bieżącą datę systemową w dziwnym formacie szeregowym MATLAB.

datestrformatuje dziwny format szeregowy na ciąg żądanego formatu - w tym przypadku 'YYYY-mm-dd'. Okazuje się, że MATLAB ma listę predefiniowanych formatów datestr. ISO8601 jest jednym z nich i jest reprezentowany przez liczbę 29, co pozwala zaoszczędzić 10 bajtów.

Tom Carpenter
źródło
1

Python 2 ,  53  40 bajtów

-10 bajtów dzięki Gáborowi Fekete (ISO-8601 jest domyślnym formatem dla obiektu daty)

from datetime import*
print date.today()

Wypróbuj online!

W jaki sposób?

datetime.date.today()zwróci datetime.dateobiekt zawierający lokalną informację o dacie.

printwypisze ciąg reprezentujący ten obiekt, wywoła to funkcję obiektu __str__.

Z dokumentów :

  • date.__str__(): Dla date d, str(d)jest równoważna d.isoformat().

  • date.isoformat(): Zwraca stringreprezentujący datę w ISO 8601 formatu ‘YYYY-MM-DD’. Na przykład date(2002, 12, 4).isoformat() == '2002-12-04'.

Jonathan Allan
źródło
1
import datetime;print datetime.date.today()jest to tylko 43 bajty i wykorzystuje datetime. Dlaczego usuwana jest jeszcze krótsza wersja?
Gábor Fekete
@ GáborFekete Dzięki (myślę, że powinieneś naprawdę napisać, jest wystarczająco inny). Druga odpowiedź została prawdopodobnie usunięta, ponieważ nie wydrukowała poprawnie sformatowanego ciągu. Dodałem wyjaśnienie, dlaczego tak naprawdę działa (o ile jedno zawiera print). Uratowałem kolejne trzy działania (zło) import*.
Jonathan Allan
Chciałem, ale było inne rozwiązanie, które było nawet krótsze niż moje, ale z jakiegoś powodu zostało usunięte.
Gábor Fekete
... który został teraz edytowany w celu uwzględnienia printchwili usunięcia, a następnie usunięcia.
Jonathan Allan
1

Kryształ , 30 bajtów 24 bajty 21 bajtów

-6 dzięki Nickowi Cliffordowi

-3 od spojrzenia na odpowiedź ślimaka w Ruby

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

Wypróbuj online!

Titus Lucretius
źródło
2
Jestem prawie pewien, że możesz użyć %F. Również miło widzieć Crystal na PPCG!
Nick Clifford
1
@Nick Clifford Widziałem to na Tio i pomyślałem, że ma fajną nazwę.
Titus Lucucjusz
1

Rdza, 84 bajtów

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

C #, 46 45 bajtów

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

Zapisano bajt dzięki @raznagul.

TheLethalCoder
źródło
2
Gdzie mogę pobrać Sytem?
Erik the Outgolfer,
6
@EriktheOutgolfer To niestandardowe opakowanie, które utworzyłem wokół Systemprzestrzeni nazw, ponieważ ciągle robiłem tę samą literówkę ...
TheLethalCoder
4
Wiesz, że rzeczy tworzone lokalnie nie są dozwolone w PPCG, chyba że zostaną opublikowane przed zadaniem pytania. : P
Erik the Outgolfer
1
@EriktheOutgolfer Damn, następnym razem utworzę też krótsze opakowanie…
TheLethalCoder
1
Ponieważ początkowe zera dla roku nie są wymagane, łańcuch formatu "yyy-MM-dd"również będzie działał.
raznagul
1

Java 8, 26 32 bajty

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

Naprawiono format dzięki Kevin Cruijssen

jaxad0127
źródło
Wow, Java jest naprawdę krótka ... Nigdy bym nie pomyślał, że zobaczę dzień: D
Rozpad
@BetaDecay Jest krótki, ale obecnie nie jest zgodny ze standardowymi zasadami codegolf. Powinna to być funkcja zamiast fragmentu kodu, a także należy policzyć wymagany import. Tak powinno być ()->java.time.LocalDate.now().toString(). Z drugiej strony możesz grać .toString()w golfa +"", więc staje się to ()->java.time.LocalDate.now()+""w sumie ( 32 bajty ).
Kevin Cruijssen
1

C ++ 14, 143 bajty 139 bajtów

#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 zwrócił mi uwagę, że nie potrzebuję wszystkich miejsc

Przetestuj mnie!

nobbele
źródło
Nie możesz usunąć kilku z tych miejsc?
Timtech
1

Szybki, 13 bajtów

print(Date())
Dimitrie-Toma Furdui
źródło