Quelle est la date?


26

Défi

Bizarrement, cela n'a pas encore été fait: affichez la date actuelle.

Règles

Le format de date que vous devez suivre est le suivant:

YYYY-MM-DD

Où le mois et le jour doivent être remplis de zéros s'ils sont inférieurs à 10.

Par exemple, si le programme est exécuté le 24 mai 2017, il devrait afficher

2017-05-24

La date peut être toujours en UTC ou dans la date locale.

Vous devez gérer des années bissextiles. c'est-à-dire pendant les années bissextiles, février compte 29 jours mais 28 jours dans une année normale.

Gagnant

Le code le plus court en octets gagne.


14
Heureux représentant 10k!
Rohan Jhunjhunwala

1
Et félicitations pour le fil à la croissance la plus rapide que j'aie jamais vu. : D
Titus

@Titus Vous auriez dû voir Hello, World! : D
Beta Decay

... et pendant les années normales, février a 31 jours de cours
edc65

@ edc65 J'aurais vraiment dû savoir que février dure 29 jours sur les années bissextiles: P
Beta Decay

Réponses:


12

Bash , 16 7 octets

-8 octets grâce à Neil (et fergusq) (aucun tube requis pour la sortie)
-1 octet grâce à 12431234123412341234123 (utilisez l'option intégrée avec indicateur -I!)

date -I

Essayez-le en ligne!


2
Pourquoi echo $(...)?
Neil

N'en a-t-il pas besoin pour sortir?
Jonathan Allan

6
datesorties déjà, la sortie est dirigée vers stdout. Vous n'avez pas besoin de le diriger vers echo, qui le dirige vers la sortie standard. Essayez-le en ligne!
fergusq

Mais même si vous voulez vraiment l'utiliser echo, du moins echo `date +%F`.
manatwork

5
pourquoi ne pas utiliser -I?
12431234123412341234123

10

PHP, 17 octets

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

1
En fait, YYYY-MM-DDThh:mm:ss+hh:mmc'est aussi une date au format ISO 8601 et ces 11 octets: <?=date(c);imprimez le tout. ;)
Titus

<?=strstr(date(c),T,1);pour donner une petite chance au format c
Jörg Hülsermann


7

Bash, 15 octets

printf '%(%F)T'

Exemple d'exécution:

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

Essayez-le en ligne!


Encore mieux que ce que j'ai trouvé sur SO, je l'ignorais T.
Jonathan Allan

@JonathanAllan, il a été ajouté uniquement dans Bash 4.2 et jusqu'à Bash 4.3, il fallait un argument pour formater.
manatwork

5

JavaScript (ES6), 34 octets

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

f=

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

console.log(f());


Hmm, même longueur que_=>new Date().toJSON().slice(0,10)
Steve Bennett

4

SQLite, 13 caractères

select date()

Bon garçon, SQLite. D'autres dialectes SQL ont généralement besoin de current_dateou date(now()).

Exemple d'exécution:

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

1
MySQL acurdate
Titus

4

Mathematica, 20 octets

DateString@"ISODate"

9
Parfois, j'entre dans ces défis non pas pour voir si Mathematica a une fonction intégrée, mais pour voir ce que c'est
PunPun1000


3

Excel, 24 octets

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

Excel fera toujours une année à 4 chiffres avec seulement 3 années y.


2
Les feuilles Google ajouteront le "). Excel ne le fera pas. Il va ajouter )à la fin , mais seulement après vous avoir demandé si elle nécessiterait l' entrée d'utilisateur supplémentaire et conduire le score à nouveau. 24 octets est probablement la réponse Excel la plus courte à moins que nous n'autorisions les paramètres régionaux en utilisant le format de date ISO par défaut et que cela soit sujet à débat .
Ingénieur Toast

@EngineerToast Merci. Je vais arranger ça.
Scott Milner

2

R , 10 octets

Sys.Date()

Essayez-le en ligne!


1
Comme c'est sys.datedéjà une fonction, vous n'avez pas besoin d'ajouter le (), donc ce n'est que 8 octets :)
JAD

@JarkoDubbeldam pas vrai, le () est nécessaire
D. Nelson

@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/… Sys.Date est une fonction, suffirait donc comme solution. Pas besoin de l'appeler explicitement.
JAD

@JarkoDubbeldam, c'est normalement le cas, mais je pense que puisque le défi est de «sortir la date actuelle au format ISO-8601», j'ai en fait besoin de la sortir.
Giuseppe

1
Eh bien oui, et la dernière ligne Sys.Datefait la sortie pour vous. C'est similaire à quand vous avez une solution qui commence par function(x), vous ne finissez pas non plus par un appel explicite. C'est juste la façon dont les intégrés sont notés.
JAD


2

Alice , 9 octets

/oT\
@%;'

Essayez-le en ligne!

Explication

Je laisserai le flux de contrôle exact au lecteur, mais le code linéarisé exécuté en mode Ordinal est:

%T'T%;o@

Et voici ce qu'il fait:

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

Une façon dont cela pourrait être jouable est de réutiliser le %pour terminer le programme en mode Cardinal avec une division par zéro, mais la seule disposition que j'ai trouvée est la suivante:

\;T
\%o'

Mais ici, le %ne termine pas réellement le programme, car nous poussons 111 ( 'o) juste à l'avance donc il n'y a jamais de division par zéro.

En principe, il peut également être possible de réutiliser %pour se débarrasser de la ;, car essayer de diviser la date autour de l'heure annulera simplement l'heure.


2

SmileBASIC 3, 29 octets

SB a une chaîne de date intégrée ... mais elle n'est pas dans le bon format! Il utilise des barres obliques au lieu de tirets, rien de bon. De plus, étant le BASIC qui se respecte, il n'y a pas de fonction de remplacement global. Je suppose que je dois le faire moi-même ...

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

2

VBA, 5 25 octets

?Date imprévisible, dépend des paramètres de date courte du système

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

Sortie:

2017-05-25 

6
Cette réponse est extrêmement volatile et par défaut, ne fonctionnera pas sur la plupart des ordinateurs car elle dépend entièrement de la configuration de la date courte de l'utilisateur [sous paramètres -> Date et heure dans Win10] définie sur 'AAAA-MM-JJ . The default format for this is M / D / YYYY` et donc ceci pour la sortie de la Datefonction est 5/25/2017. Pour corriger cela, votre réponse devrait être enveloppée dans un Formatappel.
Taylor Scott

2
@TaylorScott à cette fin en ?format(now,"yyyy-mm-dd")utilisant nowest plus court quedate
Greedo

1
@Greedo, c'est exact. C'est, à ma connaissance, le moyen le plus court d'atteindre cet objectif en utilisant VBA
Taylor Scott

1
@TaylorScott merci de l'avoir signalé, je n'étais pas conscient de la dépendance des paramètres de date du système. Ce format de date est la valeur par défaut sur mon PC et dans mon pays en général, donc j'étais un peu trop confiant ici.
Maciej Lipinski


1

QBIC , 33 octets

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

Explication:

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 octets

et3<{sY0e[}%'-*

Essayez-le en ligne!

-7 octets grâce à Challenger5.

Explication:

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

Vous pouvez utiliser e[(tableau de pad) pour 15 octets:et3<{sY0e[}%'-*
Esolanging Fruit

@ Challenger5 c'est cool. Merci
FrodCube



1

Oracle SQL, 46 octets

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

1

Powershell, 26 17 octets

Date -f yyy-MM-dd

Merci à @ConnorLSW pour les 9 octets.


vous pouvez économiser beaucoup ici. date -f 'yyyy-MM-dd'
colsw

Merci mec. Je suis nouveau chez Powershell. J'ai donc tenté ma chance ici
Sivaprasath Vadivel

@Shivaprasath V - pas de soucis, consultez ce fil pour quelques articles utiles avec les astuces de golf PS les plus basiques si vous le souhaitez.
colsw


1

MATLAB / Octave , 25 15 octets

datestr(now,29)

Essayez-le en ligne!


La fonction intégrée nowrenvoie la date système actuelle dans un format série MATLAB étrange.

datestrformate le format série bizarre dans une chaîne d'un format demandé - ce qui est dans ce cas 'YYYY-mm-dd'. Il s'avère que MATLAB a une liste de formats prédéfinis pour datestr. ISO8601 est l'un d'eux et est représenté par le nombre 29, ce qui permet une économie de 10 octets.


1

Python 2 ,  53  40 octets

-10 octets grâce à Gábor Fekete (ISO-8601 est le format par défaut pour un objet date)

from datetime import*
print date.today()

Essayez-le en ligne!

Comment?

datetime.date.today()renverra un datetime.dateobjet contenant les informations de date locale.

printaffichera une représentation sous forme de chaîne de cet objet, cela appellera la __str__fonction de l'objet .

De la documentation :

  • date.__str__(): Pour a date d, str(d)est équivalent à d.isoformat().

  • date.isoformat(): Retour d' un stringreprésentant de la date dans la norme ISO 8601 format ‘YYYY-MM-DD’. Par exemple date(2002, 12, 4).isoformat() == '2002-12-04',.


1
import datetime;print datetime.date.today()cela ne fait que 43 octets et utilise datetime. Pourquoi la version encore plus courte est-elle supprimée?
Gábor Fekete

@ GáborFekete Merci (je pense que vous auriez vraiment dû poster, c'est suffisamment différent). L'autre réponse a probablement été supprimée car elle n'a pas imprimé la chaîne correctement formatée. J'ai ajouté une explication sur la raison pour laquelle cela fonctionne réellement (tant que l'on inclut le print). A sauvé trois autres faisant (le mal) import*.
Jonathan Allan

Je le voulais mais il y avait une autre solution qui était encore plus courte que la mienne mais qui a été supprimée pour une raison quelconque.
Gábor Fekete

... qui a maintenant été modifié pour inclure les éléments printsupprimés puis supprimés.
Jonathan Allan


1

Rouille, 84 octets

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

1

C #, 46 45 octets

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

Un octet enregistré grâce à @raznagul.


2
Où télécharger Sytem?
Erik the Outgolfer

6
@EriktheOutgolfer C'est un wrapper personnalisé que j'ai créé autour de l' Systemespace de noms parce que j'ai continué à faire la même faute de frappe ...
TheLethalCoder

4
Vous savez que les choses que vous créez localement ne sont pas autorisées sur PPCG, sauf si elles sont publiées avant que la question ne soit posée. : P
Erik the Outgolfer

1
@EriktheOutgolfer Damn, la prochaine fois je créerai un wrapper plus court aussi ...
TheLethalCoder

1
Comme les zéros non significatifs pour l'année ne sont pas requis, la chaîne de format "yyy-MM-dd"fonctionnera également.
raznagul

1

Java 8, 26 32 octets

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

Format fixe grâce à Kevin Cruijssen


Wow, Java est en fait court ... Je n'aurais jamais pensé voir le jour: D
Beta Decay

@BetaDecay Il est court, mais ne respecte actuellement pas les règles de codegolf standard. Il doit s'agir d'une fonction au lieu d'un extrait de code et les importations requises doivent également être prises en compte. Il devrait donc en être ainsi ()->java.time.LocalDate.now().toString(). Là encore, vous pouvez jouer .toString()au golf +"", il devient donc ()->java.time.LocalDate.now()+""au total ( 32 octets ).
Kevin Cruijssen

1

C ++ 14, 143 octets 139 octets

#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 m'a fait remarquer que je n'ai pas besoin de tous les espaces

Teste moi!


Vous ne pouvez pas supprimer quelques-uns de ces espaces?
Timtech

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.