Что дата?


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');

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

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




4

SQLite, 13 символов

select date()

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

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

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

1
MySQL имеетcurdate
Тит

4

Mathematica, 20 байтов

DateString@"ISODate"

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()

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


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$

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.

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[(массив площадок) для 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 байтов благодаря Габору Фекете (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. Также приятно видеть Кристалл на PPCG!
Ник Клиффорд

1
@ Ник Клиффорд Я видел это в tio и думал, что у этого было классное имя.
Тит Лукреций


1

C #, 46 45 байт

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

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


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()+""

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


Ух ты, 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 указал мне, что мне не нужны все пробелы

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


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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.