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.


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!


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





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

1
MySQL macurdate
Tytusa



3

Excel, 24 bajty

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

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


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!


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

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.


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$

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 

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.

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

Możesz użyć e[(tablica padów) dla 15 bajtów:et3<{sY0e[}%'-*
Esolanging Fruit

@ Challenger5, to fajne. Dzięki
FrodCube



1

Oracle SQL, 46 bajtów

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

1

PowerShell, 26 17 bajtów

Date -f yyy-MM-dd

Dzięki @ConnorLSW za 9 bajtów.


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

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.


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


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

Rdza, 84 bajtów

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

1

C #, 46 45 bajtów

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

Zapisano bajt dzięki @raznagul.


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


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!


Nie możesz usunąć kilku z tych miejsc?
Timtech

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.