几点了,小伙子?


18

老实说,我不敢相信这不是Code Golf的问题,但是...

将本地时间(带有am或pm)作为字符串输出到控制台,并在其前面加上“ It's”。

例:

Run code....

输出:

It's 12:32p.m.

最短的代码胜出。

代码走了!

排行榜


1
输出格式是什么?有关系吗?
mbomb007'9

1
不,我的意思是,yyyy-MM-dd hh:mm:ss UTC该日期格式是否必要?
mbomb007'9

8
我真的很想提出一个答案It's beer o'clock,但我拒绝了。
MickyT 2015年

4
我们可以使用12:32 PM还是12:32PM?代替12:32p.m.
Stewie Griffin's

3
如果小于10:00,是02:32还是2:32?
Stewie Griffin's

Answers:


18

Bash,39 33字节

date "+It's %I:%M%P."|sed s/m/.m/

浪费了一堆字符,因为规范要求a.m.p.m.date输出am或时pm。感谢@DigitalTrauma节省了6个字节!

这可能不是很便携。它适用于Ubuntu 15.04。

一个在Ruby中使用基本相同方法的解决方案,长度惊人地完全相同

Ruby,39个字节

$><<`date "+It's %I:%M%P"`[0..-3]+'.m.'

%P给我AM或PM的大写字母。如果能有所作为,我正在使用Mac。
flodel 2015年

@flodel在“我的机器”上工作。在Ubuntu 15.04上,%P提供小写字母并%p提供大写字母(这有点...不直观)。
门把手

当您冒险使用POSIX指定的功能集之外时,GNU date(在Linux等上)和* BSD date(其中OSX是BSD的一种变体)具有截然不同的选项和行为。因此,也许这个答案应该特别提及Linux上的Bash。(这sed也适用;但是此特定调用完全在安全且可移植的功能集中。)
Tripleee 2015年

在我的机器(Linux上为zsh或bash)上,它显示“是04:17”。时间是16:17。没有“上午”或“下午”
aiditsu

echo -e "It's $(date +%I:%M%P)\b.m."-而不sed使用退格键。看起来对我来说不是一个单独的答案。另外,我没有任何am / pm,但我认为是因为区域设置。
aragaer 2015年

13

AppleScript,198

因为是AppleScript。因为为什么不:

set AppleScript's text item delimiters to {":"," "}
set d to (current date)'s time string's every text item
"It's "&d's item 1&":"&d's item 2&string id ((d's item 4's first character's id)+32)&".m."

那太痛苦了。


18
AppleScript是新的Java。
门把手

8

PHP,35 33字节

使用错误的工具进行工作!

It's <?=trim(date('h:ia'),m)?>.m.

它只是删除或m末尾的,以允许添加点。日期正值,并用它变成。ampm00:00amtrim00:00a


旧答案(仅适用于PHP 5.4+):

It's <?=date('h:i'),date(a)[0]?>.m.

这行得通,因为您可以取消引用从函数返回的值。在PHP5.3或更早版本中是不可能的。


啊,聪明!您击败了我的PHP答案
DankMemes 2015年

@DankMemes花了我一段时间。还有很多实验。
Ismael Miguel 2015年

您使用了不带引号的字符串文字。是否可以在没有@操作员的情况下使用这些设备并假定人们会使用它error_reporting(0)
DankMemes

@DankMemes您可以间接地假定错误报告已禁用。这是一本好书:meta.codegolf.stackexchange.com/a/1655/14732
Ismael Miguel

5

Visual Basic 6 / VBA, 42 41个字节

MsgBox"It's "&Format(Now,"h:mma/p")&".m."

使用MsgBox,因为VB6没有控制台(除非您拦截链接,将其作为控制台可执行文件链接,使用一些Windows API技巧,以及进行其他一些狡猾的工作)。


3
您为什么不只是替换m.m. Debug.Print Replace(Format(Now,"hh:mm am/pm"),"m",".m.")
CompuChip

尼斯@toothbrush,我排序预期这是CJam一个字节的溶液;)
CompuChip

4

R,6859 62 60 55

cat("It's",sub("m",".m",format(Sys.time(),"%I:%M%P.")))

(感谢@ Alex.A。和@flodel为注释)获取当前系统时间(Sys.time()),它使用正确的格式%I:%M%P组合,在端部增加了一个点,并取代m具有.m.


4

朱莉娅74 54 43字节

print(strftime("It's %I:%M%P\b.m.",time()))

您可以在线尝试

time()函数返回当前时间。传递给strftimeformat时%I:%M%P,结果为HH:MMam/pm,其中小时数是每12小时时钟一次。我们用备份一个字符,\b以删除m,留下结尾ap,然后附加.m.到末尾。

感谢Glen O,节省了31个字节


我可以建议这个吗?print("It's ",strftime("%r%P",time())[[1:5,12]],".m.")-用于%P添加小写的am / pm,以避免比较和split命令。
Glen O

关于帮助没有问题。而且不要说服自己-很好。我只是试图从代码中挤出每个最后的字节而感到高兴。在这种情况下,我只是想尝试绕过split命令和条件语句将是有益的,然后开始研究您使用的功能。我自己可能找不到strftime(我想直接从中提取时间time()
Glen O

1
@GlenO如果您从压缩代码的最后一个字节中获得乐趣,PPCG无疑是您的最佳选择!
Alex A.

顺便说一句,我找到了一种挤出更多字节的方法:print(strftime("It's %I:%M%P",time())[1:11],".m.")
Glen O

实际上,甚至更好:print(strftime("It's %I:%M%P\b.m.",time()))
Glen O

3

Haskell,135个字节

import Data.Time.Format
import Data.Time.LocalTime
main=getZonedTime>>=putStr.(++".m.").init.formatTime defaultTimeLocale"It's %I:%M%P"

我发现更有趣的main是,它长了五个字节:

getZonedTime>>=putStr.formatTime(TimeLocale[][]("a","p")""""""""[])"It's %I:%M%P.m."

在Unix上为66个字节:

import System.Cmd;main=system"date \"+It's %I:%M%P.\"|sed s/m/.m/"


3

MATLAB,59个字节

disp(sprintf('It''s%s\b.m.',lower(datestr(now,'HH:MMam'))))

现在是下午5:38

如果允许在时间和am / pm之间留有空格,则它可能低至52个字节

disp(sprintf('It''s%s\b.m.',lower(datestr(now,16))))

现在是下午5:39


我认为输出一定是05:38p.m.
Ismael Miguel

根据OP的评论,前导零并不重要。
slvrbld

你是对的。在这里,请支持我!
Ismael Miguel

真好!不知道我可以这样使用\b...顺便说一句,您需要一个额外的空间。
Stewie Griffin 2015年

3

Perl 5.10 +,58 62字节

localtime=~/(..)(:..)/;say"It's ",$1%12||12,$2,$1>11?p:a,".m."

必须与-M5.010命令行标志一起运行才能获取say

在原始解决方案中,我没有考虑几个极端情况(即00:**12:**);固定为4个额外字节。

怎么运行的

在标量上下文中,localtime返回如下字符串:

Sat Sep 12 03:13:22 2015

minutes字段已经填充了零,这节省了一些字节(在列表上下文中,localtime返回数字而不是字符串,因此您必须自己填充它们)。

这里是无高尔夫球的:

localtime=~/(..)(:..)/;  # Store hour in $1 and minutes in $2
say"It's ",              # Print "It's " followed by...
   $1%12||12,            # hour in 12-hour format
   $2,                   # minutes
   $1>11?p:a,            # "p" if hour > 11, otherwise "a"
   ".m."'                # ".m."

Perl 5.14 +,57个字节

(只是为了好玩,因为它会稍微延长规则。)

say"It's ",(strftime"%l:%M%P",localtime)=~s/m/.m./r

51个字节+ 6个字节(用于)-MPOSIX。还必须与-M5.010命令行标志一起运行以获取say

此解决方案取决于您的语言环境,因此不适用于所有系统。它还使用POSIX模块,尽管它是核心模块,但它可能会扩展“内置”的定义。

Perl 5.14+是r替换运算符的非破坏性修饰符所必需的。适用于5.10+的等效解决方案是:

$_=strftime"%l:%M%P",localtime;chop;say"It's $_.m."

这也是57个字节(51个字节+ 6个字节-MPOSIX)。


3

Perl 5,74个字节

小型展示了如何从右到左评估变量。

($s,$m,$h)=localtime;printf"It's %d:%02d%s.m.",$h<13?$h:$h%12,$m,$h<12?a:p

使用POSIX:80个字节

use POSIX;$_=strftime"It's %I:%Mx.m.",@_=localtime;$x=$_[1]<13?a:p;s/x/$x/;print

将POSIX与时间区域相关性和开关配合使用:54个字节(48 + 6)

$_=strftime"It's %I:%M%P",localtime;s/m/.m./;say

测试

$ export LC_TIME="en_DK.UTF-8"
$ perl -MPOSIX -M5.01 whatsthetimechap.pl
It's 3:09p.m.

1
您可以使用-MPOSIX代替use POSIX;,在调用中删除括号strftime,并用(is free)代替print,从而在POSIX解决方案上节省一些字节。这使您的最后一个解决方案减少到54个字节!say-M5.010
ThisSuitIsBlackNotNot

谢谢。我将您的建议用于最短的POSIX解决方案。
LukStorms

1
您仍然需要计数-MPOSIX(6个字节),但是可以删除括号来节省2个字节:$_=strftime"It's %I:%M%P",localtime;。总共有54个字节,仍然比我的57个字节的POSIX解决方案要好。做得好!
ThisSuitIsBlackNotNot 15'Sep

嘿,再次感谢您拯救了几个字节。
LukStorms

3

CJam,40个字节

"It's "et3=CmdCe|\'p'a?':et4=s2Ue[@".m."

CJam解释器中在线尝试。

怎么运行的

"It's " e# Push that string.
et3=    e# Select the fourth element of the date/time array (hours).
Cmd     e# Push quotient and remainder of the hour divided by 12.
Ce|     e# Logical OR with 12 to map 0 to 12.
\'p'a?  e# Select 'p' if the quotient is 1 and 'a' if it is 0.
':      e# Push that character.
et4=    e# Select the fifth element of the date/time array (minutes).
s2Ue[   e# Cast to string and left-pad with zeroes to a length of 2.
@".m."  e# Rotate 'a' or 'p' on top of the stack and push ".m.".

3

Mathematica 49 90 92 90 84字节

-6个字节,感谢user202729

在Mathematica中,该解决方案很简单,但有点罗word。

(d=DateString)@{"It's ","Hour12",":","Minute"}<>(d@"AMPM"/."AM"->"a.m."/."PM"->"p.m‌ .")

(尽管该帖子已经相当老了)StringReplace可以消除,节省6个字节。(d=DateString)@{"It's ","Hour12",":","Minute"}<>d@"AMPM"/."AM"->"a.m."/."PM"->"p.m."
user202729

2

T-SQL(2012+),67 65字节

SQL Server 2012终于为我们提供了一种合理的日期格式化功能。我仍然不得不修改AM / PM来获得正确的格式。

PRINT 'It''s '+LOWER(STUFF(FORMAT(GETDATE(),'hh:mmtt.'),7,0,'.'))

在以前的版本中,它需要这样的内容(93个字节)

PRINT'It''s'+LOWER(STUFF(STUFF(RIGHT(CONVERT(VARCHAR,GETDATE(),109),15),6,7,''),8,0,'.'))+'.'

2

PHP,49字节

如果只是它而am/pm不是a.m./p.m....

It's <?=@preg_replace(~Фž’¢Ð,~ÛÏÑ,date(~˜Å–ž));

我使用了很多讨厌的字节来节省一些长度,所以这是十六进制:

00000000: 49 74 27 73 20 3C 3F 3D - 40 70 72 65 67 5F 72 65 |It's <?=@preg_re|
00000010: 70 6C 61 63 65 28 7E D0 - A4 9E 92 8F A2 D0 2C 7E |place(~       ,~|
00000020: DB CF D1 2C 64 61 74 65 - 28 7E 98 C5 96 9E 29 29 |   ,date(~    ))|
00000030: 3B                      -                         |;|
00000031;

可读版本:

It's <?=preg_replace("/[amp]/", "$0.", date("g:ia"));

2

C,103 94字节

int main(){time_t r;char b[80];time(&r);strftime(b,80,"It's %I:%M %p",localtime(&r));puts(b);}

不打高尔夫球

int main()
{
  time_t r;
  char b[80];  
  time(&r);
  strftime(b,80,"It's %I:%M %p",localtime(&r));
  puts(b);
}

2

PHP,41字节

It's <?=strtr(date('g:ia'),['m'=>'.m.']);

我第一次玩这个。不知道我是应该更新/编辑以前的PHP答案(49字节)还是添加我自己的...


您应该始终添加自己的。仅当看到可以节省他们几个字节的内容时,才对某人的答案发表评论。但是除此之外,很好的答案!
Ismael Miguel 2015年

顺便说一句,您可以编写[m=>'.m.'],节省2个字节。(警告可以忽略,因此,不必担心。)
Ismael Miguel

2

SQL(PostgreSQL),42 41字节

另一种SQL变体,但是此变体在查询中。

select to_char(now(),'"It''s" HH:MIa.m.')

注意,pm或am都可以获取am / pm部分。PostgreSQL中的格式化选项确实非常灵活。感谢@manatwork提供的提示,可将it's移入格式字符串。

SQLFiddle


因此,您需要手动调整上午/下午吗?
David Arenburg 2015年

@DavidArenburg,不,无论哪种方式都正确……但是我不得不检查一下,因为它看起来不正确。如果添加+ time '12:00'now()在SQLFiddle应该改变AM / PM。
MickyT

缩短1个字符:select to_char(now(),'"It''s" HH:MIa.m.')
manatwork

@manatwork,非常感谢。我不会想尝试的。
MickyT 2015年

2

CJam,43个字节

必须用零填充数字使这个比我想要的大。最后,字符串格式化是最短的方法。

4Z]etf=~Cmd@@'p'a?]"It's %02d:%02d%c.m."\e%

在线尝试

说明

   et                                       e# Push local time
4Z]  f=                                     e# Get [minutes hours]
       ~Cmd                                 e# Unwrap array, div+mod hours by 12
           @@'p'a?                          e# Select 'p' or 'a' based on remainder
                  ]"It's %02d:%02d%c.m."\e% e# Print

1
这对于两个都失败了。代替12:37它输出00:37
扎克·盖茨2015年

2

Javascript,103个字节

从控制台执行的Javascript。

d="It's "+new Date().toLocaleTimeString();l=d.length;d.slice(0,l-6)+d.slice(-2,l-1).toLowerCase()+'.m.'

C#,63个字节

从立即窗口执行C#。

?"It's "+System.DateTime.Now.ToString("h:MMt").ToLower()+".m.";

也以F#运行;)
Stachu 2015年

您无需计算d.length,您只需编写即可-n,它会从最后开始计算,仅供参考。d="It's "+new Date().toLocaleTimeString();d.slice(0,-6)+d.slice(-2,-1).toLowerCase()+'.m.'90个字节 您可以通过移动"It's "字符串来节省一个字节。还有一个小的字符串快捷方式中的几个字节。d=new Date().toLocaleTimeString();"It's "+d.slice(0,5)+d[9].toLowerCase()+'.m.'79个字节
2015年

而且,如果答案需要与语言环境无关(如某些人所言),则只需使用toLocaleTimeString("en-US")86个字节即可。

2

重击,44个字符

纯Bash,仅内置shell,没有*** utils。

printf -vt "It's %(%I:%M%P)T"
echo ${t%m}.m.

样品运行:

bash-4.3$ printf -vt "It's %(%I:%M%P)T";echo ${t%m}.m.
It's 01:04p.m.

2

Powershell,49个字节

"It's {0:hh:mm}$("ap"[($d=date).hour/23]).m."-f$d

(date).hour/23似乎可以用作索引,"ap"因为它会舍入0小于12的小时以及小于等于12的小时1


应该可以通过将“ p” /“ a”视为字符串转换为隐式char数组来代替几个字符-51个字节"It's $(date -f hh:mm)$("pa"[(date).hour-lt12]).m."
AdmBorkBork 2015年

您最近一次"{0:hh:mm}$("ap"[($d=date).hour/23]).m."-f$d错过It's 了开始。如果把它放在最前面,则与"It's $((date -f hh:mm)+"ap"[(date).hour/23]).m."
AdmBorkBork 2015年

我的错。我已经解决了。无论如何,此版本更“正确”,因为它只拨打了一次电话date
DankoDurbić15

对于它的价值,我在研究其他东西时偶然发现了以下内容。显然[datetime]演员总是在美国。这意味着这样的事情"It's $(("{0:h:mmt}"-f[datetime](date)).ToLower()).m."是可能的……它的确是54字节,比您当前的解决方案更长,但仍然是该语言的一个有趣之处。
AdmBorkBork 2015年

@TimmyD有趣的是,但似乎只是转换为DateTime(美国),而不格式化。
DankoDurbić2015年

2

取决于语言环境

对于将语言环境设置为en-CA或默认情况下输出12小时时间的任何语言环境的浏览器环境:

CoffeeScript,81个字节

alert "It's #{(x=(new Date).toLocaleTimeString().toLowerCase())[..4]} #{x[9]}.m."

JavaScript(ES5),90个字节

alert("It's "+(x=(new Date).toLocaleTimeString().toLowerCase()).slice(0,5)+' '+x[9]+".m.")

与语言环境无关

CoffeeScript,113 96字节

alert "It's #{(h=(d=new Date).getHours())%12}:#{('0'+d.getMinutes())[-2..]} #{'ap'[+(h>11)]}.m."

以前:

无论使用哪种语言环境,该版本都可以在所有浏览器环境中使用。需要Chrome 24以上版本,Firefox 29以上版本,IE 11以上版本,Opera 15以上版本或其任何衍生版本。在Safari中不起作用。请参阅Intl.DateTimeFormat

alert "It's #{new Intl.DateTimeFormat('en',{hour:f='2-digit',minute:f}).format(new Date).toLowerCase()[..-2]}.m."

JavaScript答案给了我:It's 2:59: m.m.
Mwr247

@ Mwr247您的浏览器在哪个语言环境中?
rink.attendant.2015年

@ rinkattendant6我的语言环境是en-US
Mwr247

2

斯威夫特-124102字节

import Cocoa
var f=NSDateFormatter()
f.dateFormat="hh:mma"
print("It's \(f.stringFromDate(NSDate()))")

2

C,154字节

#include <time.h>
#define l localtime(&r)
main(){time_t r=time(0);printf("It's %02i:%02i%c.m.",(l->tm_hour+11)%12+1,l->tm_min,(l->tm_hour>=12)?'p':'a');}

与其他C答案相反,此答案使用正确的“ am” /“ pm”格式。省略了另一张海报#include <time.h>–如果您的编译器允许这样做,我们减少到136个字节。我们应该算哪一个?


您是对的,实际上我得到的只是一个警告-我将其与尝试不做时的错误混为一谈time.h。编辑。
mindriot

1

Moonscript-56个字节

print "It's "..(os.date'%I:%M%p'\gsub 'M','.M.')\lower!

不幸的是,Lua标准库只为大写AM / PM实现%p,因此我不得不将方法调用得更低一些。


1

SpecBAS-64字节

PRINT "It's ";LOW$(REPLACE$(TIME$(TIME,"h:mm p$"),"M",".M."))

p$时间函数的内置函数返回AM或PM,因此必须对其进行格式化以对其REPLACE$进行更改,以便在该字母之前/之后有一个句号。

然后,时间输出必须转换为小写。


1

MATLAB,66字节

['It''s' lower(datestr(now,'HH:MMam'))];disp([ans(1:end-1),'.m.'])

显示:

It's 2:48p.m.

1

Python 2,75 67 66字节

import time;print"It's %s.m."%time.strftime("%I:%M%p")[:6].lower()

旧版本,75字节

import time
t=time.strftime("%I:%M%p")
print"It's",t[:5]+t[5].lower()+".m."

旧版本,75字节

import time
print"It's",time.strftime("%I:%M%p").lower().replace("m",".m.")

@AlexA。至少在Windows下无法在Python 2 time.strftime中工作,显示“ ValueError:无效的格式字符串”
Max

@ win32上的@AlexA Python 2.7.10(默认值,2015年5月23日,09:40:32)[MSC v.1500 32位(英特尔)]键入“帮助”,“版权”,“信用”或“许可证”以获取更多信息信息。>>>导入时间;打印“这是%sm”%time.strftime(“%I:%M%p”)[:6] .lower()它是01:30 p.m.`
最大

1

Python 3,117 87 79字节

from datetime import*
print(datetime.now().strftime("It's %I:%M%P")[:-1]+".m.")

此使用格式获取从一个12小时时钟小时和分钟%I:%M,加ampm使用%P。然后,我们选择除last m和append之外的所有内容.m.

感谢露丝·富兰克林节省了几个字节!


1
由于您只使用datetime一次,因此使用时间缩短了6个字节from datetime import*; h=datetime.now() ...
Ruth Franklin

@RuthFranklin感谢您的建议!我还发现了其他几种缩短它的方法。
Alex A.
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.