几号?


26

挑战

奇怪的是,这还没有完成:输出当前日期。

规则

您应遵循的日期格式如下:

YYYY-MM-DD

如果月份和日期小于10,则该月份和日期应以零填充。

例如,如果程序在2017年5月24日运行,则应输出

2017-05-24

该日期可以始终为UTC或本地日期。

您必须应对leap年。例如,在leap年中,二月有29天,但在正常年份中有28天。

获奖

以字节为单位的最短代码获胜。


14
10k代表快乐!
Rohan Jhunjhunwala

1
并祝贺我见过的增长最快的线程。:D
泰特斯

@Titus您应该已经看过世界,您好!:D
Beta Decay's

...正常情况下,2月当然有31天
edc65

@ edc65我真的应该知道Feb在is年里是29天长:P
Beta Decay

Answers:


12

Bash16 7字节

Neil(和fergusq)使-8个字节(不需要管道输出)
由于12431234123412341234123而使-1个字节(使用带有标志的内置选项-I!)

date -I

在线尝试!


2
为什么echo $(...)呢?
尼尔

它不需要它输出吗?
乔纳森·艾伦

6
date已经输出,输出通过管道传递到stdout。您无需将其通过管道传输到echo,后者通过管道将其传输到stdout。在线尝试!
fergusq

但是,即使您真的想使用echo,也至少echo `date +%F`
manatwork '17

5
为什么不使用-I
12431234123412341234123





4

SQLite,13个字符

select date()

好孩子,SQLite。其他SQL方言通常需要current_datedate(now())

样品运行:

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

1
MySQL有curdate
Titus

4

Mathematica,20个字节

DateString@"ISODate"

9
有时我遇到这些挑战不是看Mathematica是否内置,而是看它是什么
-PunPun1000


3

Excel,24个字节

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

Excel仍将只用3来表示4位数字的年份y


2
Google表格将添加")。Excel不会。它添加)上结束,但只提示你之后,因此将需要更多的用户输入,并再次带动了比分。除非我们默认允许使用ISO日期格式进行区域设置,否则24字节可能是Excel的最短答案,这值得争论
Engineer Toast

@EngineerToast谢谢。我会解决的。
斯科特·米尔纳

2

R,10个字节

Sys.Date()

在线尝试!


1
由于sys.date已经是一个函数,您不必添加(),所以它只有8个字节:)
JAD

@JarkoDubbeldam不是正确的,()是必需的
D. Nelson

@ D.Nelson codegolf.meta.stackexchange.com/questions/2419/... Sys.Date是一个函数,因此足以作为解决方案。无需显式调用它。
JAD

@JarkoDubbeldam通常是这种情况,但我认为由于面临的挑战是“以ISO-8601格式输出当前日期”,因此我实际上需要将其输出。
朱塞佩

1
是的,最后一行为Sys.Date您完成输出。这类似于您拥有以开头的解决方案时function(x),也不会以显式调用结尾。这就是内置分数的评分方式。
JAD


2

爱丽丝,9字节

/oT\
@%;'

在线尝试!

说明

我将把确切的控制流程留给读者做练习,但是在Ordinal模式下运行的线性化代码是:

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

但是在这里,%实际上并没有终止程序,因为我们'o提前按了111(),所以永远不会除以零。

原则上,也可以重用%以摆脱;,因为尝试在时间周围分割日期只会浪费时间。


2

SmileBASIC 3,29个字节

SB内置有日期字符串...但是格式错误!它使用斜杠代替破折号,不好。另外,作为自重的BASIC,它没有全局替换功能。我想我必须自己做...

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

2

VBA,5 25字节

?Date 不可预测,取决于系统短日期设置

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

输出:

2017-05-25 

6
该答案非常不稳定,而且不明智,在大多数计算机上不起作用,因为它完全取决于用户将其系统短日期格式[在Win10中,设置->日期和时间下]设置为'YYYY-MM-DD . The default format for this is M / D / YYYY`,因此此Date函数的输出为5/25/2017。要纠正此问题,您的答案将需要包装在Format电话中。
泰勒·斯科特

2
为此,?format(now,"yyyy-mm-dd")使用nowdate
@TaylorScott的

1
@Greedo,没错。这是,据我所知,最近的路用VBA实现这一目标
泰勒斯科特

1
@TaylorScott感谢您指出这一点,我不知道对系统日期设置的依赖。此日期格式我的PC以及整个国家(地区的默认格式,因此我对此有点过分自信。
Maciej Lipinski


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

CJam22 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[}%'-*
硕果累累

@ Challenger5太酷了。谢谢
FrodCube



1

Oracle SQL,46字节

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



1

MATLAB / 八度25 15字节

datestr(now,29)

在线尝试!


内置函数now以怪异的MATLAB序列格式返回当前系统日期。

datestr将怪异的串行格式格式化为所需格式的字符串-在这种情况下就是这样'YYYY-mm-dd'。事实证明,MATLAB有一个针对的预定义格式列表datestr。ISO8601是其中之一,并由数字29表示,这可以节省10个字节。


1

Python 2中 53  40个字节

-10字节归功于GáborFekete(ISO-8601是日期对象的默认格式)

from datetime import*
print date.today()

在线尝试!

怎么样?

datetime.date.today()将返回一个datetime.date包含本地日期信息的对象。

print将打印该对象的字符串表示形式,这将调用该对象的__str__函数。

文档

  • date.__str__():对于date dstr(d)等于d.isoformat()

  • date.isoformat()stringISO 8601格式返回代表日期的‘YYYY-MM-DD’。例如,date(2002, 12, 4).isoformat() == '2002-12-04'


1
import datetime;print datetime.date.today()这只有43个字节,使用datetime。为什么删除更短的版本?
加博·费克特(GáborFekete)

@GáborFekete谢谢(我想您应该已经发布了,它已经足够不同了)。另一个答案可能已删除,因为它没有打印正确格式的字符串。我已经添加了一种解释,说明为什么它确实有效(只要其中包括print)。拯救了另外三个人(邪恶)import*
乔纳森·艾伦

我想要,但是还有另一个解决方案,它比我的还短,但由于某种原因被删除了。
加博尔·费克特(GáborFekete)

...现在已被编辑为包括print一会儿删除然后取消删除的内容。
乔纳森·艾伦



1

C#,46 45字节

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

感谢@raznagul,节省了一个字节。


2
在哪里下载Sytem
暴民埃里克(Erik the Outgolfer)'17年

6
@EriktheOutgolfer这是我围绕System命名空间创建的自定义包装程序,因为我一直在做相同的错字...
TheLethalCoder

4
您知道在PPCG上不允许在本地创建的内容,除非在提出问题之前将其发布。:P
暴民埃里克(Erik the Outgolfer)'17年

1
@EriktheOutgolfer该死,下一次我也会创建一个较短的包装器……
TheLethalCoder

1
由于不需要年份的前导零,因此格式字符串"yyy-MM-dd"也将起作用。
raznagul

1

Java 8,26 32字节

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

固定格式感谢Kevin Cruijssen


哇,Java实际上很短 ...我从没想过我会看到这一天:D
Beta Decay

@BetaDecay简短,但目前不符合标准的代码高尔夫规则。它应该是一个函数,而不是摘要,并且还应该计算所需的导入。所以应该()->java.time.LocalDate.now().toString()改为。再一次,您可以打高尔夫球.toString()+"",因此()->java.time.LocalDate.now()+""总数变为32个字节
凯文•克鲁伊森'17

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 '17

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.