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.


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!


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

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



5

JavaScript (ES6), 34 bytes

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

f=

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

console.log(f());


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

1
O MySQL temcurdate
Titus

4

Mathematica, 20 bytes

DateString@"ISODate"

9
Às vezes eu entrar em estes desafios não para ver se Mathematica tem um built-in, mas para ver o que é
PunPun1000


3

Excel, 24 bytes

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

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


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!


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

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.


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$

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 

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.

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

Você pode usar e[(matriz de pad) para 15 bytes:et3<{sY0e[}%'-*
Esolanging Fruit

@ Challenger5 isso é legal. Obrigado
FrodCube 24/17



1

Oracle SQL, 46 bytes

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

1

Powershell, 26 17 bytes

Date -f yyy-MM-dd

Obrigado a @ConnorLSW pelos 9 bytes.


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

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.


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


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

Ferrugem, 84 bytes

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

1

C #, 46 45 bytes

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

Guardou um byte graças a @raznagul.


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


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!


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.