Qual é a data?

26

Desafio

Estranhamente, isso ainda não foi feito: produza a data atual.

Regras

O formato da data que você deve seguir é o seguinte:

YYYY-MM-DD

Onde o mês e o dia devem ser preenchidos com zeros se forem menores que 10.

Por exemplo, se o programa for executado em 24 de maio de 2017, ele deverá gerar uma saída

2017-05-24

A data pode estar sempre no UTC ou na data local.

Você deve lidar com anos bissextos. ou seja, em anos bissextos, fevereiro tem 29 dias, mas 28 dias em um ano normal.

Ganhando

O menor código em bytes vence.

Beta Decay
fonte
14
Feliz representante 10k!
Rohan Jhunjhunwala
1
E parabéns pelo segmento que mais cresce que eu já vi. : D
Titus
@ Titus Você deveria ter visto Olá, Mundo! : D
Beta Decay
... e em anos normais fevereiro tem 31 dias de curso
edc65
@ edc65 Eu realmente deveria saber que fevereiro dura 29 dias nos anos bissextos: P
Decay Beta

Respostas:

12

Bash , 16 7 bytes

-8 bytes graças ao Neil (e fergusq) (nenhum pipe é necessário para a saída)
-1 byte graças ao 12431234123412341234123 (use a opção embutida com o sinalizador -I!)

date -I

Experimente online!

Jonathan Allan
fonte
2
Por que o echo $(...)?
Neil
Não é necessário que ele produza?
Jonathan Allan
6
datesaídas já, a saída é canalizada para stdout. Você não precisa canalizá-lo echo, o que direciona para o stdout. Experimente online!
Fergusq
Mas mesmo se você realmente quiser usar echo, pelo menos echo `date +%F`.
Manatwork 24/05
5
por que não usar -I?
12431234123412341234123
10

PHP, 17 bytes

<?=date('Y-m-d');
Titus
fonte
1
Na verdade, YYYY-MM-DDThh:mm:ss+hh:mmtambém é uma data formatada em ISO 8601 e esses 11 bytes: <?=date(c);imprimem todo o material. ;)
Tito
<?=strstr(date(c),T,1);para dar ao formato c um pouco de chance
Jörg Hülsermann 24/17
7

Bash, 15 bytes

printf '%(%F)T'

Exemplo de execução:

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

Experimente online!

homem a trabalhar
fonte
Ainda melhor do que eu encontrei no SO, não tinha conhecimento T.
Jonathan Allan
@ JonathanAllan, foi adicionado apenas no Bash 4.2 e até o Bash 4.3 exigia um argumento para formatar.
Manatwork 24/05
5

JavaScript (ES6), 34 bytes

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

f=

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

console.log(f());

Johan Karlsson
fonte
Hmm, mesmo comprimento que_=>new Date().toJSON().slice(0,10)
Steve Bennett
4

SQLite, 13 caracteres

select date()

Bom garoto, SQLite. Outros dialetos SQL geralmente precisam de um current_dateou date(now()).

Exemplo de execução:

bash-4.4$ sqlite3 <<< 'select date()'
2017-05-24
homem a trabalhar
fonte
1
O MySQL temcurdate
Titus
4

Mathematica, 20 bytes

DateString@"ISODate"
J42161217
fonte
9
Às vezes eu entrar em estes desafios não para ver se Mathematica tem um built-in, mas para ver o que é
PunPun1000
4

Perl 6 ,  14  12 bytes

Date.today.say

Tente

now.Date.say

Tente

Brad Gilbert b2gills
fonte
3

Excel, 24 bytes

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

O Excel ainda fará um ano de 4 dígitos com apenas 3 y's.

Scott Milner
fonte
2
As folhas do Google adicionarão o "). O Excel não. Ele irá adicionar o )sobre o fim, mas apenas depois de pedir-lhe para que ele exigiria a entrada do usuário adicional e conduzir a pontuação novamente. 24 bytes é provavelmente a resposta mais curta do Excel, a menos que permitamos configurações regionais usando o formato de data ISO por padrão, e isso está em debate .
Engineer Toast
@EngineerToast Thanks. Eu vou consertar isso.
25817 Scott Milner
2

R , 10 bytes

Sys.Date()

Experimente online!

Giuseppe
fonte
1
Desde sys.datejá é uma função, você não tem que adicionar o (), então isso é apenas 8 bytes :)
JAD
@JarkoDubbeldam não é verdade, o () é necessário
D. Nelson
@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/… Sys.Date é uma função, portanto seria suficiente como solução. Não há necessidade de chamá-lo explicitamente.
JAD
@JarkoDubbeldam normalmente é o caso, mas acho que, como o desafio é 'gerar a data atual no formato ISO-8601', na verdade, preciso produzi-la.
Giuseppe
1
Bem, sim, e a última linha Sys.Datefaz a saída para você. É semelhante a quando você tem uma solução que começa com function(x), também não termina com uma chamada explícita. É exatamente como os built-ins são pontuados.
JAD
2

Lua, 18 caracteres

print(os.date"%F")

Exemplo de execução:

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

Experimente online!

homem a trabalhar
fonte
2

Alice , 9 bytes

/oT\
@%;'

Experimente online!

Explicação

Deixarei o fluxo exato de controle como um exercício para o leitor, mas o código linearizado que está sendo executado no modo Ordinal é:

%T'T%;o@

E aqui está o que ele faz:

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

Uma maneira de isso ser possível é reutilizar o %para encerrar o programa no modo Cardinal com uma divisão por zero, mas o único layout que criei é o seguinte:

\;T
\%o'

Mas aqui, na %verdade , ele não encerra o programa, porque pressionamos 111 ( 'o) imediatamente, para que nunca haja uma divisão por zero.

Em princípio, também pode ser possível reutilizar %para se livrar dele ;, pois tentar dividir a data ao longo do tempo simplesmente descartará o tempo.

Martin Ender
fonte
2

SmileBASIC 3, 29 bytes

SB tem uma string de data incorporada ... mas está no formato errado! Ele usa barras em vez de traços, nada bom. Além disso, sendo o BASIC que se preze, não há função de substituição global. Eu acho que tenho que fazer isso sozinho ...

D$=DATE$D$[4]="-
D$[7]="-
?D$
Caracol_
fonte
2

VBA, 5 25 bytes

?Date imprevisível, dependente das configurações de datas curtas do sistema

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

Saída:

2017-05-25 
Maciej Lipinski
fonte
6
Essa resposta é extremamente volátil e, por surdos, não funcionará na maioria dos computadores, pois depende inteiramente do usuário ter o formato de data abreviado do sistema [em configurações -> Data e hora no Win10] definido como 'AAAA-MM-DD . The default format for this is M / D / AAAA` e, portanto, isso para a saída da Datefunção é 5/25/2017. Para corrigir isso, sua resposta precisa ser agrupada em uma Formatchamada.
Taylor Scott
2
@TaylorScott para esse efeito ?format(now,"yyyy-mm-dd")usando nowé menor do quedate
Greedo
1
@ Gregedo, isso está correto. Isto é, a meu conhecimento, o caminho mais curto para atingir esse objetivo usando VBA
Taylor Scott
1
@TaylorScott obrigado por apontar isso, eu não estava ciente da dependência das configurações de data do sistema. Esse formato de data é o padrão no meu PC e no meu país em geral, então fiquei um pouco confiante aqui.
Maciej Lipinski
1

QBIC , 33 bytes

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

Explicação:

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
fonte
1

CJam , 22 15 bytes

et3<{sY0e[}%'-*

Experimente online!

-7 bytes graças ao Challenger5.

Explicação:

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
fonte
Você pode usar e[(matriz de pad) para 15 bytes:et3<{sY0e[}%'-*
Esolanging Fruit
@ Challenger5 isso é legal. Obrigado
FrodCube 24/17
1

Python 2, 40 bytes

from datetime import*;print date.today()
Wondercricket
fonte
1

Oracle SQL, 46 bytes

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL
Khaled.K
fonte
1

Powershell, 26 17 bytes

Date -f yyy-MM-dd

Obrigado a @ConnorLSW pelos 9 bytes.

Sivaprasath Vadivel
fonte
você pode economizar muito aqui. date -f 'yyyy-MM-dd'
colsw
Obrigado cara. Eu sou novo no Powershell. Então, eu tentei a minha sorte aqui
Sivaprasath Vadivel
@Shivaprasath V - não se preocupe, verifique este tópico para ver algumas postagens úteis com os truques mais básicos de golfe para PS, se você quiser.
colsw
1

Ruby, 23 bytes

Imprime a hora local.

p Time.now.strftime'%F'
Caracol_
fonte
1
p Time.now.to_s[0..9]
Manatwork
1

MATLAB / Oitava , 25 15 bytes

datestr(now,29)

Experimente online!


A função nowinterna retorna a data atual do sistema em um formato serial MATLAB estranho.

datestrformata o formato serial estranho em uma sequência de um formato solicitado - que é neste caso 'YYYY-mm-dd'. Acontece que o MATLAB tem uma lista de formatos predefinidos para datestr. A ISO8601 é uma delas e é representada pelo número 29, que permite economizar 10 bytes.

Tom Carpenter
fonte
1

Python 2 ,  53  40 bytes

-10 bytes graças a Gábor Fekete (ISO-8601 é o formato padrão para um objeto de data)

from datetime import*
print date.today()

Experimente online!

Quão?

datetime.date.today()retornará um datetime.dateobjeto que contém as informações da data local.

printimprimirá uma representação de string desse objeto, isso chamará a __str__função do objeto .

Dos documentos :

  • date.__str__(): Para a date d, str(d)é equivalente a d.isoformat().

  • date.isoformat(): Retorne a stringrepresentando a data no formato ISO 8601‘YYYY-MM-DD’ ,. Por exemplo date(2002, 12, 4).isoformat() == '2002-12-04',.

Jonathan Allan
fonte
1
import datetime;print datetime.date.today()isso é apenas 43 bytes e usa datetime. Por que a versão ainda mais curta é excluída?
Gábor Fekete 25/05
@ GáborFekete Obrigado (acho que você realmente deveria ter postado, é suficientemente diferente). A outra resposta provavelmente foi excluída porque não imprimiu a seqüência de caracteres formatada corretamente. Eu adicionei uma explicação sobre por que isso realmente funciona (desde que inclua o print). Salvou outros três fazendo (o mal) import*.
Jonathan Allan
Eu queria, mas havia uma outra solução que era ainda mais curta que a minha, mas que foi excluída por algum motivo.
Gábor Fekete
... que agora foi editado para incluir o printtempo excluído e a exclusão.
Jonathan Allan
1

Cristal , 30 bytes 24 bytes 21 bytes

-6 agradecimentos a Nick Clifford

-3 de olhar para a resposta de snail_ em Ruby

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

Experimente online!

TitusLucretius
fonte
2
Tenho certeza que você pode usar %F. Além disso, é bom ver o Crystal no PPCG!
Nick Clifford
1
@ Nick Clifford Eu vi no tio e achei que tinha um nome legal.
TitusLucretius
1

Ferrugem, 84 bytes

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

C #, 46 45 bytes

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

Guardou um byte graças a @raznagul.

TheLethalCoder
fonte
2
Onde faço o download Sytem?
Erik the Outgolfer
6
@EriktheOutgolfer É um costume envoltório I criado em torno do Systemnamespace porque eu continuei a fazer o mesmo erro de digitação ...
TheLethalCoder
4
Você sabe que as coisas criadas localmente não são permitidas no PPCG, a menos que sejam publicadas antes da pergunta. : P
Erik the Outgolfer
1
@EriktheOutgolfer Droga, da próxima vez eu vou criar um wrapper mais curto, bem ...
TheLethalCoder
1
Como os zeros à esquerda do ano não são necessários, a sequência de formatação "yyy-MM-dd"também funcionará.
raznagul
1

Java 8, 26 32 bytes

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

Formato fixo graças a Kevin Cruijssen

jaxad0127
fonte
Uau, Java é realmente curto ... eu nunca pensei que veria o dia: D
Decay Beta
@BetaDecay É curto, mas atualmente não está em conformidade com as regras padrão do codegolf. Deve ser uma função em vez de um trecho, e as importações necessárias também devem ser contadas. Então deveria ser ()->java.time.LocalDate.now().toString(). Então, novamente, você pode golfe .toString()para +"", então, torna-se ()->java.time.LocalDate.now()+""no total ( 32 bytes ).
Kevin Cruijssen
1

C ++ 14, 143 bytes 139 bytes

#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);}

A Timtech me indicou que não preciso de todos os espaços

Me teste!

nobbele
fonte
Você não pode remover alguns desses espaços?
Timtech
1

Rápido, 13 bytes

print(Date())
Dimitrie-Toma Furdui
fonte