Что дата?

26

Вызов

Как ни странно, это еще не сделано: вывести текущую дату.

правила

Формат даты, которому вы должны следовать, выглядит следующим образом:

YYYY-MM-DD

Где месяц и день должны быть дополнены нулями, если они меньше 10.

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

2017-05-24

Дата может быть либо всегда в UTC, либо в местной дате.

Вы должны справиться с високосными годами. в високосные годы, февраль имеет 29 дней, но 28 дней в обычном году.

выигрыш

Самый короткий код в байтах побеждает.

Бета распад
источник
14
С Днем 10k респ!
Рохан
1
И поздравляю с самой быстрорастущей нитью, которую я когда-либо видел. : D
Тит
@Titus Вы бы видели Hello, World! : D
бета-распад
... и в обычные годы февраль имеет 31 день, конечно
edc65
@ edc65 Я действительно должен был знать, что февраль длится 29 дней в високосные годы: P
бета-распад

Ответы:

12

Баш , 16 7 байт

-8 байт благодаря Нейлу (и fergusq) (для вывода не требуется труба)
-1 байт благодаря 12431234123412341234123 (используйте встроенную опцию с флагом -I!)

date -I

Попробуйте онлайн!

Джонатан Аллан
источник
2
Почему то echo $(...)?
Нил
Разве это не нужно для вывода?
Джонатан Аллан
6
dateвыходы уже, выход передается на стандартный вывод. Вам не нужно передавать его по трубопроводу echo, который направляет его в стандартный вывод. Попробуйте онлайн!
fergusq
Но даже если вы действительно хотите использовать echo, то, по крайней мере echo `date +%F`.
manatwork
5
почему бы не использовать -I?
12431234123412341234123
10

PHP, 17 байт

<?=date('Y-m-d');
Titus
источник
1
На самом деле, YYYY-MM-DDThh:mm:ss+hh:mmэто также дата в формате ISO 8601 и эти 11 байтов: <?=date(c);распечатать весь материал. ;)
Тит
<?=strstr(date(c),T,1);дать формату немного шансов
Йорг Хюльсерманн
7

Баш, 15 байт

printf '%(%F)T'

Образец прогона:

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

Попробуйте онлайн!

manatwork
источник
Даже лучше, чем я нашел на SO, не знал T.
Джонатан Аллан
@JonathanAllan, он был добавлен только в Bash 4.2 и до Bash 4.3 требовался аргумент для форматирования.
manatwork
5

JavaScript (ES6), 34 байта

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

f=

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

console.log(f());

Йохан Карлссон
источник
Хмм, такой же длины, как и_=>new Date().toJSON().slice(0,10)
Стив Беннетт
4

SQLite, 13 символов

select date()

Хороший мальчик, SQLite. Другие диалекты SQL обычно требуется либо current_dateили date(now()).

Образец прогона:

bash-4.4$ sqlite3 <<< 'select date()'
2017-05-24
manatwork
источник
1
MySQL имеетcurdate
Тит
4

Mathematica, 20 байтов

DateString@"ISODate"
J42161217
источник
9
Иногда я сталкиваюсь с этими проблемами не для того, чтобы увидеть, есть ли в Mathematica встроенные функции, а чтобы посмотреть, что это такое
PunPun1000
3

Excel, 24 байта

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

Excel по-прежнему будет делать 4-значный год только с 3 y-х.

Скотт Милнер
источник
2
Гугл листы добавит "). Excel не будет. Он будет добавить )в конце , но только после того, как предлагающей поэтому потребуется дополнительный пользовательский ввод и снова вести счет до. 24 байта, вероятно, самый короткий ответ Excel, если только мы не разрешаем региональные настройки, используя формат даты ISO по умолчанию, и это подлежит обсуждению .
Тост инженера
@EngineerToast Спасибо. Я исправлю это.
Скотт Милнер
2

R , 10 байт

Sys.Date()

Попробуйте онлайн!

Giuseppe
источник
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.

Один из способов, которым это может быть пригодно для игры в гольф, состоит в том, чтобы повторно использовать программу, %чтобы завершить программу в режиме Cardinal с делением на ноль, но единственное расположение, которое я придумал, заключается в следующем:

\;T
\%o'

Но здесь, на %самом деле, программа не завершает работу, потому что мы нажимаем 111 ( 'o) заранее, чтобы никогда не делить на ноль.

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

Мартин Эндер
источник
2

SmileBASIC 3, 29 байт

SB имеет встроенную строку даты ... но она в неправильном формате! Он использует косые черты вместо черточек, ничего хорошего. Плюс, будучи уважающим себя Бейсиком, нет никакой глобальной функции замены. Я думаю, я должен сделать это сам ...

D$=DATE$D$[4]="-
D$[7]="-
?D$
snail_
источник
2

VBA, 5 25 байт

?Date непредсказуемо, зависит от настроек системы короткой даты

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

Выход:

2017-05-25 
Мацей Липински
источник
6
Этот ответ является чрезвычайно изменчивым и по умолчанию не будет работать на большинстве компьютеров, поскольку полностью зависит от того, установлен ли у пользователя системный краткий формат даты [в настройках -> Дата и время в Win10] на «ГГГГ-ММ-ДД . The default format for this is М / Д» / YYYY` и таким образом это для вывода Dateфункции 5/25/2017. Чтобы исправить это, ваш ответ должен быть заключен в Formatвызов.
Тейлор Скотт
2
@TaylorScott с этой целью ?format(now,"yyyy-mm-dd")использование nowкорочеdate
Greedo
1
@ Гридо, это правильно.
Тейлор Скотт,
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.
steenbergh
источник
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
FrodCube
источник
Вы можете использовать e[(массив площадок) для 15 байтов:et3<{sY0e[}%'-*
Esolanging Fruit
@ Challenger5 это круто. Спасибо
FrodCube
1

Python 2, 40 байт

from datetime import*;print date.today()
Wondercricket
источник
1

Oracle SQL, 46 байт

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL
Khaled.K
источник
1

Powershell, 26 17 байт

Date -f yyy-MM-dd

Спасибо @ConnorLSW за 9 байтов.

Сивапрасат Вадивель
источник
Вы можете сэкономить много здесь. date -f 'yyyy-MM-dd'
colsw
Спасибо чувак. Я новичок в Powershell. Итак, я попытал счастья здесь
Сивапрасат Вадивел
@Shivaprasath V - не беспокойтесь, проверьте эту ветку на пару полезных постов с более простыми приемами игры в гольф PS, если хотите.
colsw
1

Рубин, 23 байта

Печатает местное время.

p Time.now.strftime'%F'
snail_
источник
1
p Time.now.to_s[0..9]
manatwork
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 байтов благодаря Габору Фекете (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")

Попробуйте онлайн!

TitusLucretius
источник
2
Я уверен, что вы можете использовать %F. Также приятно видеть Кристалл на PPCG!
Ник Клиффорд
1
@ Ник Клиффорд Я видел это в tio и думал, что у этого было классное имя.
Тит Лукреций
1

Ржавчина, 84 байта

extern crate chrono;fn main(){print!("{}",chrono::Local::now().format("%Y-%m-%d"));}
Чед Бакстер
источник
1

C #, 46 45 байт

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

Сохраненный байт благодаря @raznagul.

TheLethalCoder
источник
2
Где я могу скачать Sytem?
Эрик Outgolfer
6
@EriktheOutgolfer Это специальная оболочка, которую я создал для Systemпространства имен, потому что я продолжал делать одну и ту же опечатку ...
TheLethalCoder
4
Вы знаете, что материалы, которые вы создаете локально, не разрешены в PPCG, если они не опубликованы до того, как задан вопрос. : P
Эрик Outgolfer
1
@EriktheOutgolfer Черт, в следующий раз я также создам более короткую оболочку ...
TheLethalCoder
1
Поскольку ведущие нули для года не требуются, строка формата "yyy-MM-dd"также будет работать.
Разнагул
1

Java 8, 26 32 байта

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

Фиксированный формат благодаря Кевину Круйссену

jaxad0127
источник
Ух ты, Java на самом деле короткая ... Я никогда бы не подумал, что увижу этот день: D
Beta Decay
@BetaDecay Это короткий, но в настоящее время не соответствует стандартным правилам Codegolf. Это должна быть функция, а не фрагмент, а также необходимо учитывать необходимый импорт. Так и должно быть ()->java.time.LocalDate.now().toString(). Опять же, вы можете играть .toString()в гольф +"", так что это становится ()->java.time.LocalDate.now()+""всего ( 32 байта ).
Кевин Круйссен
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 указал мне, что мне не нужны все пробелы

Проверь меня!

nobbele
источник
Не могли бы вы удалить несколько из этих мест?
Timtech
1

Свифт, 13 байт

print(Date())
Дмитрий-Тома Фурдуй
источник