Яка дата?


26

Виклик

Дивно, але цього ще не зроблено: виведіть поточну дату.

Правила

Формат дати, якого слід дотримуватися, такий:

YYYY-MM-DD

Там, де місяць і день повинні бути забитими нулями, якщо вони менше 10.

Наприклад, якщо програма запускається 24 травня 2017 року, вона повинна вивести

2017-05-24

Дата може бути завжди в UTC або в місцеву дату.

Ви повинні боротися з високосними роками. тобто у високосні роки, лютий має 29 днів, але 28 днів у звичайному році.

Перемога

Найкоротший код у байтах виграє.


14
Щасливий 10k представник!
Rohan Jhunjhunwala

1
І вітаю найшвидше зростаючу нитку, яку я коли-небудь бачив. : D
Тіт

@Titus Ви мали бачити привіт, світ! : D
Бета-розпад

... а в звичайні роки лютий має 31 день курсу
edc65

@ edc65 Я справді повинен був знати, що в лютому у високосні роки триває 29 днів: P
бета-розпад

Відповіді:


12

Баш , 16 7 байт

-8 байт завдяки Neil (і fergusq) (не потрібна труба для виведення)
-1 байт завдяки 12431234123412341234123 (використовуйте вбудований варіант із прапором -I!)

date -I

Спробуйте в Інтернеті!


2
Чому echo $(...)?
Ніл

Чи не потрібно це для виведення?
Джонатан Аллан

6
dateВиходи вже, вихід виводиться на stdout. Вам не потрібно трубувати в неї echo, яка трубопроводить її для прокладки. Спробуйте в Інтернеті!
fergusq

Але навіть якщо ви дійсно хочете використовувати echo, то принаймні echo `date +%F`.
манатура

5
чому б не використовувати -I?
12431234123412341234123

10

PHP, 17 байт

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

1
Насправді, YYYY-MM-DDThh:mm:ss+hh:mmце також дата, відформатована ISO 8601, і ці 11 байт: <?=date(c);надрукуйте весь матеріал. ;)
Тіт

<?=strstr(date(c),T,1);дати трохи шансу формату c
Йорг Гюльсерманн


7

Баш, 15 байт

printf '%(%F)T'

Проба зразка:

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

Спробуйте в Інтернеті!


Навіть краще, ніж я знайшов на SO, не знав про це T.
Джонатан Аллан

@JonathanAllan, він був доданий тільки в Bash 4.2 і до Bash 4.3 він не вимагав аргументу для форматування.
манастирство


4

SQLite, 13 символів

select date()

Хороший хлопчик, SQLite. Іншим діалектам SQL зазвичай потрібно current_dateабо date(now()).

Проба зразка:

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

1
MySQL маєcurdate
Тіт

4

Математика, 20 байт

DateString@"ISODate"

9
Іноді я стикаюся з цими викликами не для того, щоб зрозуміти, чи є вбудована програма Mathematica, а щоб побачити, що це таке
PunPun1000


3

Excel, 24 байти

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

Excel все одно буде робити 4-значний рік із лише 3 y-х.


2
Аркуші Google додадуть "). Excel не буде. Він додасть позначку в )кінці, але лише після того, як вам буде запропоновано, тому знадобиться додаткове введення користувачем і знову збільшить рахунок. 24 байти - це, мабуть, найкоротша відповідь Excel, якщо ми не допускаємо регіональних налаштувань, використовуючи стандартний формат дати ISO за замовчуванням, і це вже для обговорення .
Інженер Тост

@EngineerToast Дякую Я це виправлю.
Скотт Мілнер

2

R , 10 байт

Sys.Date()

Спробуйте в Інтернеті!


1
Оскільки sys.dateвже є функцією, вам не потрібно додавати значення (), тому це лише 8 байт :)
JAD,

@JarkoDubbeldam неправда, потрібне ()
Д. Нельсон,

@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/… Sys.Date - це функція, тому вистачить як рішення. Не потрібно явно називати це.
JAD

@JarkoDubbeldam, як правило, це так, але я думаю, що оскільки завдання полягає в тому, щоб "вивести поточну дату у форматі ISO-8601", мені фактично потрібно вивести її.
Джузеппе

1
Ну так, і останній рядок Sys.Dateробить результат для вас. Це схоже на те, коли у вас є рішення, яке починається з цього function(x), ви також не закінчуєте це явним викликом. Це лише те, як забиті вбудовані модулі.
JAD


2

Аліса , 9 байт

/oT\
@%;'

Спробуйте в Інтернеті!

Пояснення

Точний керуючий потік залиште читачеві як вправу, але лінеаризований код, який запускається в звичайному режимі:

%T'T%;o@

І ось що це робить:

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

Один із способів цього може бути зіграним - це повторне використання програми %для завершення програми в режимі Кардинала з поділом на нуль, але єдиний макет, який я придумав, полягає в наступному:

\;T
\%o'

Але тут програма %насправді не припиняє роботу, оскільки ми 'oзаздалегідь натискаємо 111 ( ), щоб ніколи не було поділу на нуль.

В принципі, можливо, також можна повторно використовувати %для позбавлення від цього ;, оскільки спроба розділити дату на час просто відкине час.


2

SmileBASIC 3, 29 байт

У SB вбудований рядок дати ... але він у неправильному форматі! Він використовує косі риски замість тире, нічого доброго. Плюс, будучи БАЗОВИМ, що поважає себе, немає глобальної функції заміни. Я думаю, що я повинен це зробити сам ...

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

2

VBA, 5 25 байт

?Date непередбачуваний, залежний від системних налаштувань короткої дати

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

Вихід:

2017-05-25 

6
Ця відповідь є надзвичайно мінливою та глухою, вона не працюватиме на більшості комп’ютерів, оскільки це повністю залежить від того, чи користувач матиме системний формат коротких дат [у налаштуваннях -> Дата та час у Win10], встановлений на "РРРР-MM-DD . The default format for this is M / D / YYYY`, і, таким чином, це для виведення Dateфункції 5/25/2017. Щоб виправити це, вашу відповідь потрібно було б загорнути в Formatдзвінок.
Тейлор Скотт

2
@TaylorScott для цього ?format(now,"yyyy-mm-dd")використання nowкоротшеdate
Greedo

1
@Greedo, це правильно. Наскільки мені відомо, це найкоротший шлях для досягнення цієї мети за допомогою VBA
Тейлор Скотт

1
@TaylorScott дякую, що вказав на це, я не знав про залежність від налаштувань системної дати. Цей формат дати є типовим для мого ПК та моєї країни загалом, тому я тут трохи переконався.
Мацей Ліпінський


1

QBIC , 33 байти

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

Пояснення:

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 байт

et3<{sY0e[}%'-*

Спробуйте в Інтернеті!

-7 байт завдяки Challenger5.

Пояснення:

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

Ви можете використовувати e[(pad масив) для 15 байт:et3<{sY0e[}%'-*
Esolanging Fruit

@ Challenger5 це здорово. Спасибі
FrodCube




1

Powershell, 26 17 байт

Date -f yyy-MM-dd

Завдяки @ConnorLSW за 9 байт.


тут можна багато заощадити. date -f 'yyyy-MM-dd'
colsw

Спасибі Людина. Я новачок у Powershell. Отже, я спробував тут свою удачу
Сівапрасат Вадивель,

@Shivaprasath V - не хвилюйтесь, перевірте цю тему на кілька корисних дописів з більш простими трюками з гольфу в PS, якщо хочете.
colsw


1

MATLAB / Octave , 25 15 байт

datestr(now,29)

Спробуйте в Інтернеті!


Вбудована функція nowповертає поточну системну дату у дивному серійному форматі MATLAB.

datestrФормат дивного послідовного формату формує в рядок запитуваного формату - що в цьому випадку 'YYYY-mm-dd'. Виявляється, у MATLAB є список заздалегідь визначених форматів для datestr. ISO8601 є одним з них і представлений цифрою 29, що дозволяє зберегти 10 байт.


1

Python 2 ,  53  40 байт

-10 байт завдяки Gábor Fekete (ISO-8601 - формат за замовчуванням для об’єкта дати)

from datetime import*
print date.today()

Спробуйте в Інтернеті!

Як?

datetime.date.today()поверне datetime.dateоб’єкт, що містить інформацію про місцеву дату.

printнадрукує рядкове представлення цього об'єкта, це викликатиме функцію об'єкта __str__.

З документів :

  • date.__str__(): Для date d, str(d)це еквівалентно d.isoformat().

  • date.isoformat()Повернути stringпредставлення дати в ISO 8601 форматі ‘YYYY-MM-DD’. Наприклад, date(2002, 12, 4).isoformat() == '2002-12-04'.


1
import datetime;print datetime.date.today()це всього 43 байти і використовує час дат. Чому ще коротша версія видалена?
Габор Фекете

@ GáborFekete Спасибі (я думаю, ви дійсно повинні були розмістити повідомлення, це досить інше) Інша відповідь, ймовірно, була видалена, оскільки вона не надрукувала правильно відформатований рядок. Я додав пояснення, чому це насправді працює (до тих пір, поки до них належить print). Врятували ще трійку вчинок (зло) import*.
Джонатан Аллан

Я хотів, але було ще одне рішення, яке було навіть коротшим, ніж моє, але було видалено чомусь.
Габор Фекете

... який тепер був відредагований, щоб включити printчас видалення, а потім відмінено.
Джонатан Аллан

1

Кристал , 30 байт 24 байт 21 байт

-6 завдяки Ніку Кліффорду

-3 від перегляду відповіді равлики в Рубі

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

Спробуйте в Інтернеті!


2
Я впевнений, що ви можете використовувати %F. Також приємно бачити Crystal на PPCG!
Нік Кліффорд

1
@Nick Clifford Я бачив це в tio і думав, що це крута назва.
Тит Люкрецій


1

C #, 46 45 байт

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

Збережено байт завдяки @raznagul.


2
Де завантажити Sytem?
Ерік Аутгольфер

6
@EriktheOutgolfer Це спеціальна обгортка, яку я створив навколо Systemпростору імен, тому що я продовжував робити те саме
друк

4
Ви знаєте, що речі, які ви створюєте локально, заборонено на PPCG, якщо вони не опубліковані до того, як буде поставлено питання. : P
Ерік Атголфер

1
@EriktheOutgolfer Блін, наступного разу я також створять коротшу обгортку ...
TheLethalCoder

1
Оскільки провідні нулі за рік не потрібні, рядок формату "yyy-MM-dd"також буде працювати.
raznagul

1

Java 8, 26 32 байти

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

Фіксований формат завдяки Кевіну Крейсейну


Ого, Java насправді короткий ... Я б ніколи не думав побачити день: D
бета-розпад

@BetaDecay Це коротко, але на даний момент не відповідає стандартним правилам codegolf. Це повинна бути функція замість фрагменту, а також потрібно враховувати необхідний імпорт. Так має бути ()->java.time.LocalDate.now().toString()замість цього. Потім знову можна пограти .toString()в гольф +"", так що це стає ()->java.time.LocalDate.now()+""в цілому ( 32 байти ).
Kevin Cruijssen

1

C ++ 14, 143 байт 139 байт

#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 зазначив мені, що мені не потрібні всі місця

Випробуй мене!


Ви не можете видалити кілька цих пробілів?
Timtech

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.