输出当前时间


49

挑战

您必须通过以下任何一种方式连续输出当前时间(直到被中断取消),每秒一次。

  • 它必须为24小时或AM / PM格式。
    • 如果是前者,则必须用冒号隔开(即15:47:36)。
    • 如果是后者,则必须用冒号隔开,并紧跟AM / PM(即3:47:36 PM)
  • 它可能是从互联网上提取的。
  • 可能是系统时间。
  • 它必须输出支持您选择的文本的任何自然可访问的输出形式。
  • 输出中可能除了时间之外还包含其他信息,但是您必须保证每秒仅输出一次时间。
  • 连续输出必须相隔一秒-如果您选择等待输出之间的秒数变化,那很好。如果您在每个输出之间等待一秒钟,那将是完全可以接受的,尽管最终会失去准确性。

由于这是一个目录,因此可以竞争之后创建的语言。请注意,必须有一个解释器,以便可以测试提交。允许(甚至鼓励)自己为以前未实现的语言编写此解释器。除此之外,必须遵守所有的标准规则。大多数语言的提交都将以适当的预先存在的编码(通常为UTF-8)以字节计分。

目录

这篇文章底部的Stack Snippet会根据答案a)生成目录,a)作为每种语言最短解决方案的列表,b)作为整体排行榜。

为确保您的答案显示出来,请使用以下Markdown模板以标题开头。

## Language Name, N bytes

N您提交的文件大小在哪里。如果您提高了分数,则可以通过打败旧分数保持标题。例如:

## Ruby, <s>104</s> <s>101</s> 96 bytes

如果要在标头中包含多个数字(例如,因为您的分数是两个文件的总和,或者您想单独列出解释器标志罚分),请确保实际分数是标头中的最后一个数字:

## Perl, 43 + 2 (-p flag) = 45 bytes

您还可以将语言名称设置为链接,然后该链接将显示在代码段中:

## [><>](http://esolangs.org/wiki/Fish), 121 bytes


“直到被中断取消”包括关闭程序,还是需要一种机制来停止编码到其中的循环?
user81655 2015年


1
警告:所有sleep 1基于答案的中断规则5:您必须保证每秒仅输出一次时间。!!
F. Hauri

1
F.豪里:怎么样?规则6表示“如果在每个输出之间等待一秒钟,那也很好。”
YetiCGN

1
@Jasen否,但是“没问题”的含义意味着,无论最终的时间损失如何,等待选项仍然有效。我已经为您澄清了这一点。
艾迪生·克伦普

Answers:


56

Minecraft 1.8.7,7 + 8 = 15个blytes(字节+块)

仅涉及一个命令块:

xp 1 @p

输出进入客户端控制台,如下所示:

times

作为正常输出的一部分。

这是系统:

the system

xp使用语法为指定的玩家提供一定的经验xp <amount> <player>。我很确定这是我现在可以获得的具有唯一输出的最小命令。


3
不要说“ 19字节”,因为您没有以字节为单位测量答案的大小。
feersum 2015年

6
@feersum 我有理由说字节,相信我。到目前为止,这是最接近 MC 共识的事情
艾迪生·克伦普

4
您可以使用不赞成使用的数字代码,对吗?
Conor O'Brien 2015年

4
如果需要,请使用此评分系统,无论如何都是19,但不是19字节,因为没有以前定义的编码可让您将此解决方案存储在19字节的文件中。
feersum

1
我相信@CᴏɴᴏʀO'Bʀɪᴇɴ我必须将其包装在JSON中。除非我使用1.6,否则实际上是另一种语言。
Addison Crump 2015年

17

JavaScript,32字节

setInterval("alert(Date())",1e3)

使用setInterval评估代码的事实。不建议这样做,但是什么时候关注代码高尔夫?

Date() 以这样的格式返回当前时间和日期(可能因系统而异)。

 Wed Jul 28 1993 14:39:07 GMT-0600 (PDT)

setInterval(alert,1e3,Date())代替吗?
ETHproductions's

@ETHproductions它总是为我显示相同的时间
ev3commander

在您的示例中,@ ETHproductions Date()仅在创建间隔时才评估一次
MMM

15

sh(+ watch),11个字节

脚本:

watch -n1 .

(无尾随换行符)

输出:

Every 1,0s: . (SPACES) Sat Nov 28 19:07:51 2015

间距的大小取决于端子的宽度。

在Debian8和NetBSD7上测试。


正确的工作工具,+ 1
Addison Crump,2015年

等等,这算作一种编程语言吗?你能给我一个口译员的链接吗?
Addison Crump 2015年

@VoteToClose watch是一个coreutil。真正的语言是bash / sh。
门把手

所以...这Bash (distribution)不是watch吗?@Doorknob
Addison Crump

1
嗯,您必须使用-pswitch来不违反规则,您必须保证每秒只能输出一个时间。!!
F. Hauri

15

捕捉8 7 6块


(是的,我在MS Paint中更改了它,因为我太懒了,无法制作另一个屏幕截图。那又如何?至少它是可读的。)
单击脚本以运行
24小时制。


2
我一直喜欢图形编程语言。:D +1
艾迪生·克伦普

哦,ev3!我在Snap / Scratch论坛上认识您:P为什么您需要Snap而不是Scratch?
anOKsquirrel

2
@anOKsquirrel因为我不需要嵌套所有这些连接块。
ev3commander

那不应该读9:21:08吗?
路加福音

@Luke如TI-BASIC答案所示,输出中不带前导零的时间很好。这是人类可读的并且清楚什么时间。
艾迪生·克伦普

11

Python 2,47个字节

from time import*
while[sleep(1)]:print ctime()

没有在线链接,因为ideone在打印任何内容之前会超时(huehuehue)。

感谢@xsot的while[sleep(1)]技巧和ctime窍门。

像这样打印出当前日期和时间: Fri Nov 27 21:23:02 2015


2
/ me在双关语中慢慢拍手。非常有趣的Mego。; D
艾迪生·克伦普


sleep 1基于答案突破规则5:您必须保证每秒只能输出一个时间。
F. Hauri

@ F.Hauri sleep 1使当前线程休眠一秒钟。它符合规则。
Mego

1
@ F.Hauri考虑到挑战作者本人sleep(1)他的AppleScript解决方案他的Vitsy + bash解决方案中都使用了等效的方法,因此这显然是可以接受的。
Mego

9

Perl,命令行,24字节

sleep(say)while$_=gmtime

这必须从命令行运行,例如perl -E'sleep(say)while$_=gmtime'(在Windows上,使用双引号代替)。日期将与时间一起输出,这似乎是允许的


Perl,25个字节

sleep print$/.gmtime;do$0

在标量上下文中,gmtime将返回类似于的字符串Sat Nov 28 10:23:05 2015print始终为1 的结果用作的参数sleepdo$0用于在计时器结束后再次执行脚本。


2
正如@VoteToClose的AppleScript解决方案注释所证明的那样,您无需提取时间。
Mego

1
另一个24字节解决方案:{sleep say~~gmtime;redo}
Denis Ibaev '16

sleep 1基于答案的中断规则5:您必须保证每秒只有一次输出时间
F. Hauri

@ F.Hauri在发布此帖子后添加了规则。
primo

9

Javascript ES6,43个39字节

setInterval(_=>console.log(Date()),1e3)

至少可以使用我当前的时间设置(已经有一段时间没有更改了,谢谢)。

Conor O'Brien保存了4个字节。


警报时间较短?
Maltysen,2015年

8
@Maltysen我认为在许多浏览器中,您必须关闭一个警报窗口才能看到下一个警报窗口。
瑕疵的

@Maltysen我尝试过,以某种方式弄乱了间隔
SuperJedi224

1
您不需要.toTimeString()Chrome和FF。
鲍勃

1
我认为您可以替换new Date()Date()
Conor O'Brien 2015年

8

阿约乌(27)

(@ t(pn(zz 1)(p(st %H:%M:%S

为了应对这一挑战,我不得不综合考虑两个新功能,zz并且st

pn:就像Lisp的progn

zz:直接链接到Python的time.sleep

st:直接链接到Python的time.strftime

通常,在格式字符串周围需要使用引号,但是由于没有空格,因此将其解析为符号。解释器将未定义的符号视为自身,因此我们得到一个字符串。


1
我会投票,但是我没有任何表决权。+1; c还有不错的更新。:D
艾迪生·克伦普

7

Bash,51 31 24 21 20字节

感谢@quartata提供了一些非常有用的评论。感谢@Dennis的澄清,并砍掉了更多的字节。感谢@VoteToClose阐明了规则(显然我不擅长阅读)进一步减少了字节数。

date显示带有24小时制的完整日期。sleep 1睡一秒钟。exec $0无限循环脚本。

date;sleep 1;exec $0

您不需要shebang。
意大利面条

另外,我觉得你可以替换truesleep 1sleep回报1
意大利面条

date +%T;sleep 1;exec $0有点短。@quartata Nitpicking:sleep退出代码为零,这就是为什么while继续。
丹尼斯

3
哦,我是个白痴
意大利面条

2
不需要空格date,因此只有20个字节。
ThisSuitIsBlackNot 2015年

6

Befunge 98,53个字节

 v
v>"EMIT"4(>H.8,':,M.8,':,S:.8,d,
>:S-    !!k^

笔记:

  1. 该程序不会对要打印的数字进行零填充。
  2. 该程序在每个数字之后打印一个空格,然后打印一个退格字符,因为该.命令在最后打印一个隐式空格。
  3. 该程序中堆栈的大小每秒增长一次,因此最终将耗尽内存。
  4. 该程序将在打印新内容时覆盖上一次。要使其每次都在新行上打印,d请将第一行上的更改为a

为什么需要“ TIME”字符串?有什么办法可以抓住它吗?(我对此一无所知)
Addison Crump 2015年

"EMIT"4(在节目开始时告诉解释加载TIME指纹,这使HMS指令。(不,它不会发出数字4)。
pppery

这是真棒。我什至从未想到许多esolang会这样做,+ 1。
艾迪生·克伦普

@VoteToClose Befunge 98甚至有一条指令来执行从堆栈中弹出的任意程序。
pppery

1
跑去学习这种语言对不起...
艾迪生·克朗普

6

mIRC 7.49 20 16字节

/timer 0 1 $time

我们在哪里可以测试?
艾迪生·克伦普

您必须下载mIRC,它是一个共享软件IRC客户端。您也可以从以下网址下载:mirc.com,因为上述答案已被利用,say您需要连接到服务器然后加入频道。否则,您将使用echo代替say。mIRC拥有自己的脚本语言mSL(mIRC脚本语言)
Do0msDay

5

AutoHotkey,50个字节

x::Send,% a!=A_Sec? A_Hour ":" A_Min ":" a:=A_Sec:

笔记:

  1. 需要您保持x连续输出。
  2. 松开手指x以中断并结束输出。
  3. 输出为24小时格式。

2
您可以将一些额外的字节放在工具提示中,这样就不需要用户按住x
Michelfrancis Bustillos

5

C(在Linux 64),179个 177 175 168 159字节

#include<time.h>
#include<sys/time.h>
main(){struct timeval a;char b[9];for(;;){gettimeofday(&a,0);strftime(b,9,"%T",localtime(&a.tv_sec));puts(b);sleep(1);}}

取消高尔夫:

#include <time.h>
#include <sys/time.h>
main(){
  struct timeval a;
  char b[9];
  for(;;){
    gettimeofday(&a, 0);
    strftime(b, 9, "%T",localtime(&a.tv_sec));
    puts(b);
    sleep(1);
  }
}

仅在linux x64上进行过测试,并且可能仅在linux x64上可以运行(x32可以工作,但其他平台可能不行)。

该程序与其他发布的C程序之间的主要区别是使用linux独有的函数调用,尽管对于真正的软件而言这是可怕的做法,但如果忽略所有编译器警告,则会节省大量字节。


欢迎来到PPCG!除非我记错了,我相信你可以删除之间的空间#include<...>。另外,您可以使用1e6代替1000000吗?
Addison Crump 2015年

@VoteToClose您对#includes中的空格是正确的。它看起来不像usleep()接受1e6,但是-基于它开始吐出时间戳的速度,它只是将其解释为
1。– Gamerdog

\ _(ツ)_ /¯我也不是很懂C。那我就让专业人员来。再次欢迎您,进行投票。:D
艾迪生·克伦普

嗯,另一件事-您不必只在时间上剪短字符串,因此只要输出其中包含所需时间字符串的日期时间,就可以输出整个日期时间。
Addison Crump 2015年

2
您可以在%T中将其用作格式规范strftime
Mego

5

Jolf14 8 7字节

划掉14是打击1?w,它永远不会流行;)

在这里尝试!单击运行,不要单击其他任何内容^ _ ^该页面具有高度爆炸性。是。带有更新的固定输出系统。

TaD#`~2

(我加了一些常数,~1~4有权力10。)

说明

setInterval("alert(Date())",1000);
     T         a      D#   ` ~2

4
有人应该创建YAJSGV(但另一个JavaScript高尔夫变体)。
intrepidcoder

这似乎打印的不仅仅是时间。
丹尼斯

1
@Dennis我认为与其他 解决方案
Conor O'Brien

不好,我只看了你的和Bash的答案。
丹尼斯

@Dennis没问题^ _ ^
Conor O'Brien

5

Dyalog APL27 18 16字节

':',¨⎕TS⋄→≢⎕DL 1

在线尝试!

⎕TSYMD hmst
':',¨前置:对每个
新语句
⎕DL 1等待一秒钟并返回实际的等待时间;大约1.0秒钟
的实际等待时间,使1
转到行(1 =该行)


4

Perl 6、29个字节

正确的方式做到这一点:

Supply.interval(1).tap: -> $ {
  say join ':',.hour,.minute,.whole-second given DateTime.now
}
await Promise.new; # halt this thread indefinitely
22:21:58
22:21:59
22:22:0
22:22:1
22:22:2
…

高尔夫版

loop {sleep say join ':',now.polymod(1,60,60,24)[31]} # 56 bytes
3:59:26
3:59:27
3:59:28
3:59:29
…

由于输出不必仅限于时间,因此我可以使输出时间短很多。

loop {sleep say DateTime.now} # 29 bytes
2015-11-27T22:18:10-06:00
2015-11-27T22:18:11-06:00
2015-11-27T22:18:12-06:00
2015-11-27T22:18:13-06:00
…

4

R,38个字节

repeat{Sys.sleep(1);print(Sys.time())}

这将以以下格式输出当前时间:

[1] "2015-11-28 07:34:01 CET"

4

Powershell,19个字节

for(){date;sleep 1}

既然已经指出,输出只需要包含hh:mm:ss,您可以减少到for(){date;sleep 1}
Steve

4

PHP,37字节

<?=date('G:i:s');header('refresh:1');

输出格式化的服务器时间,并将页面设置为每秒刷新。

当然,这取决于您的互联网连接以及服务器的响应速度:)

演示版


不,不刷新:Warning: Cannot modify header information - headers already sent
Martijn

@Martijn我不知道你能惹什么,因为它对我
有用

我会消除怀疑的好处,但这对我来说只适用一次。在两个不同的常规服务器上尝试过。
马丁

2
取决于是否打开了输出缓冲。
安德里亚(Andrea)

<?=header('refresh:1').date('G:i:s');应该与任一输出缓冲设置一起使用。
杰森

4

VBA,69字节

节省时间很容易,now()仅每1秒钟输出一次。

这是在VBA中等待1秒的“正确”方法。78字节

Sub a():Debug.Print Now():Application.Wait Now()+TimeValue("0:0:1"):a:End Sub

或者,如果您想偷工减料而仅在86%的时间正确就足够了63字节
添加一个SigFig可使您达到95%的准确度,而三分之一将使您达到99.36%

Sub a():Debug.Print Now():Application.Wait Now()+1e-5:a:End Sub

如果要使上述方法达到100%,则需要69个字节 (1/86400)

Sub a():Debug.Print Now():Application.Wait Now()+(1/86400):a:End Sub

所有这些方法都将st秒,因为它们不等待1秒钟,而是等到1秒钟。在午夜十二时,此时钟将停止1个小时,然后从中断的地方开始计时。

VBA允许使用“睡眠方法”,但您的字节码已损坏。97字节

Declare Sub Sleep Lib "kernel32" (ByVal k as Long)
Sub a():Debug.Print Now():Sleep(1e3):a:End Sub

3

JavaScript,47 38 35字节

for(p=1;t=Date();p=t)t!=p&&alert(t)

说明

持续检查时间是否已更改,然后检查时间是否已更改alert

for(
  p=1;
  t=Date();
  p=t
)
  t!=p
    &&alert(t)

您不必只获取时间字符串。; D只要它在某处。
艾迪生·克伦普

@VoteToClose哦,是的!
user81655 2015年

不要以为+"",如果没有new,就不需要Date()返回字符串。
ETHproductions 2015年

@ETHproductions啊,是的,那是使用时留下的new。感谢您抓住这一点!
user81655 2015年

3

AppleScript,51 35字节

重复
记录当前日期
延迟1
结束

漂亮当当很明显。打印当前日期,其中包含时间,延迟一秒钟,然后继续。


1
因此,等等,是否可以打印出当前日期和时间?
意大利面条

@quartata是的,只要可以连续输出时间并保证可以输出,那么与时间的任何串联都可以。
Addison Crump 2015年

延迟1做什么?暂停1000000000 ns?
杰森

@Jasen是的。
艾迪生·克伦普


3

Dyalog APL,36个字节

这次不是很短。

{⎕←1↓∊'⊂:⊃,ZI2'⎕FMT 3↑3↓⎕TS⋄∇⎕DL 1}1

输出24小时时间,即:

14:37:44
14:37:45
14:37:46
...

说明:

  • {... }1:定义一个函数并调用它(参数将被忽略,但是我们需要该函数才能递归调用它)
    • ⎕TS:一个系统函数,以年-月-日-小时-分钟-秒-毫秒的格式返回当前日期和时间。(⎕TS= IME 小号夯实)
    • 3↑3↓:删除前3个项目(即年-月-天),然后取剩下的前3个项目(小时-分钟-秒)。
    • '⊂:⊃,ZI2'⎕FMT:将每个数字格式化为I2带有前导零(Z)并以冒号(⊂:⊃)为前缀的两位整数()。(这将产生一个矩阵。)
    • :按行顺序获取矩阵中的所有元素。(这给出一个向量,在这种情况下为字符串。)
    • 1↓:删除第一个字符(这是一个额外的:
    • ⎕←:输出
    • ⎕DL 1:然后等待一秒钟(⎕DL= d e l ay)
    • :递归调用函数

{⎕←1↓∊':',¨⍕¨3↑3↓⎕TS⋄∇⎕DL 1}1对于28个字节,按照OP足够了。
2015年

新规则允许垃圾输出和随机空间,因此您可以摆脱很多限制。
亚当


3

Haskell,98 96 85字节

import GHC.Conc
import Data.Time
m@main=getCurrentTime>>=print>>threadDelay(10^6)>>m

使用do表示法的替代版本:

main = do
  time <- getCurrentTime
  print time
  threadDelay 1000000
  main

getCurrentTimeData.Time库中获取当前时间,然后将其传输到print,等待1,000,000微秒(1秒)并自行调用。

感谢妮米和毛里斯!


m@main=...>>m总是短于main=...>>main
Lynn

另外,由于threadDelay还是GHC专用的,您可以从GHC.Conc
Lynn

3

批次-34 40字节

我喜欢内置变量:

:A                    //Set label A
echo %time%           //Print the time in 24 hour format
timeout 1    //Wait 1 second (thanks DavidPostill)
goto A                //Jump back to A and repeat

肯定sleep很快就会在Batch中有一些命令。


没有内置的睡眠,但是有超时。你可以替换ping ...使用timeout 1。另外,使用时时钟也不是很准确pingtimeout;)更好;)
DavidPostill 2015年

@DavidPostill感谢您的提示,我不知道Windows中有这样的命令。:)
GiantTree

@GiantTree,非常欢迎您;)
DavidPostill,2015年

高尔夫:删除:A和替换goto A%0
stevefestl

3

Python 3,99字节

很抱歉,如果它格式化奇怪的代码,请从ipad上执行。(不要问)。我知道这段代码考虑其他一些答案很重要,但是我还没有看到python,所以我想添加它。

import time
import datetime
while(True):
 print(datetime.datetime.now().time())
 time.sleep(1)  

您可以替换True使用1,如果你把printsleep线在同一行while(用分号隔开)可以节省您的空白。
Undergroundmonorail

@undergroundmonorail好的,感谢True / 1提示。我不习惯Java Dosent那样做。我也不知道Python也有分号。我会研究一下
Ashwin Gupta

3

Java中,300个 166 137 125 124字节

感谢VoteToClose,PaüloEbermann和janschweizer 几乎减半了!

interface A{static void main(String[]a)throws Exception{for(;;Thread.sleep(1000))System.out.println(new java.util.Date());}}

取消高尔夫:

interface A {
    static void main(String[] a) throws Exception {
        for (;; Thread.sleep(1000)) System.out.println(new java.util.Date());
    }
}

1
简化导入:出于相同的原因,java.util.*而不是两个java.util导入java.text.*。使用for(;;)无限循环。使用String[]a主声明。使用interface A{static void main(...,因为这样会进一步缩短。您可以使用ExceptionInterruptedException,你可以替换ex使用e。您也可以删除渔获物内的所有文本,因为这仍然无济于事。
艾迪生·克伦普

1
是的,接口的东西有点古怪-考虑到接口是专门设计为不可运行的,我不知道为什么Java会让它成为东西。
Addison Crump 2015年

1
两件事:您需要将时间字符串更改为“ HH:mm:ss”-到目前为止,您正在格式化“ Hour:Month:Second”。另外,由于您使用的是循环,因此可以一起消除DateFormatCalendar变量的声明。您将for循环的内容替换为System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));try{Thread.sleep(1000);}catch(Exception e){}
Addison Crump 2015年

1
我刚刚建议的所有内容都总结如下:import java.util.*;import java.text.*;interface A{static void main(String[]a){for(;;){System.out.println(new SimpleDateFormat("HH:mm:ss").format(Calendar.getInstance().getTime()));try{Thread.sleep(1000);}catch(Exception e){}}}}
Addison Crump

1
throws Exception比尝试/捕获短
阶段

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.