Saat kaç, adamım?


18

Dürüst olmak gerekirse bu henüz Code Golf bir soru değil inanamıyorum, ama ....

Yerel saati (am veya pm ile) önce "It's" ile başlayan bir dize olarak yazdırın.

Misal:

Run code....

Çıktı:

It's 12:32p.m.

En kısa kod kazanır.

Kod yaz!

Liderler Sıralaması


1
Çıktı formatı nedir? Önemli mi?
mbomb007

1
Hayır, demek istediğim, olmalı yyyy-MM-dd hh:mm:ss UTCya da bu tarih biçimi önemli değil mi?
mbomb007

8
Gerçekten baskı yapan bir cevap koymak istedim It's beer o'clock, ama direndim.
MickyT

4
Kullanabileceğimiz 12:32 PMveya 12:32PM? Bunun yerine 12:32p.m.?
Stewie Griffin

3
10:00'dan küçükse 02:32 veya 2:32 mi?
Stewie Griffin

Yanıtlar:


18

Bash, 39 33 bayt

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

Spec gerektirdiğinden karakter bir grup israf a.m.ya p.m.da dateçıkışlar amveya pm. @DigitalTrauma'ya 6 bayt kazandığı için teşekkürler!

Bu çok taşınabilir olmayabilir. Ubuntu 15.04 üzerinde çalışır.

Ruby'de esasen aynı yöntemi kullanan ve şaşırtıcı bir şekilde aynı uzunlukta olan bir çözüm :

Ruby, 39 bayt

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

%Pbana büyük harf AM veya PM veriyor. Bir fark yaratırsa bir mac'tayım.
flodel

@flodel Makinede Çalışır ™. Ubuntu 15.04'te %Pküçük harf verir ve %pbüyük harf verir (bu biraz ... kasıtsız).
Kapı tokmağı

GNU date(Linux ve diğerleri üzerinde) ve * BSD date(burada OSX bir BSD varyantıdır) POSIX tarafından belirtilen özellik kümesinin dışına çıktığınızda çılgınca farklı seçeneklere ve davranışlara sahiptir. Belki de bu cevap özellikle Linux'ta Bash'tan bahsetmelidir. (Bu da geçerlidir sed; ancak bu özel çağrı, güvenli ve taşınabilir özellik setinde sıkı bir şekilde yer almaktadır.)
Üçlü

Makinemde (Linux'ta zsh veya bash) "04:17" yazıyor. zaman 16:17. Hiçbir "am" veya "pm"
aditsu

echo -e "It's $(date +%I:%M%P)\b.m."- sedbackspace yerine . Bana ayrı bir cevap gibi görünmüyor. Ayrıca herhangi bir am / pm yok ama bunun nedeni yerel olduğunu düşünüyorum.
aragaer

13

AppleScript, 198

Çünkü AppleScript. Çünkü neden olmasın:

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

Acı vericiydi.


18
AppleScript yeni Java'dır.
Kapı Tokmağı

8

PHP, 35 33 bayt

İş için yanlış aracı kullanmak!

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

Nokta eklemeye izin vermek için ya mda sonunu kaldırır . Tarih olduğu gibi gelir ve onunla olur .ampm00:00amtrim00:00a


Eski yanıt (yalnızca PHP 5.4+):

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

Bu, bir işlevden döndürülen bir değerin referansını kaldırabileceğiniz için çalışır. PHP5.3 veya daha eski sürümlerde bu mümkün değildir.


Ah, akıllı! Sen benim php cevap yendi
DankMemes

@DankMemes Çok uzun sürdü. Ve çok fazla deneme.
Ismael Miguel

Tırnaksız bir dize hazır bilgisi kullandınız. @Operatör olmadan bunları kullanmak ve insanların onu çalıştıracağını varsaymak uygun error_reporting(0)mudur?
DankMemes

@DankMemes Dolaylı olarak hata raporlamanın devre dışı bırakıldığını varsayabilirsiniz. İşte iyi bir okuma: meta.codegolf.stackexchange.com/a/1655/14732
Ismael Miguel

5

Visual Basic 6 / VBA, 42 41 bayt

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

Kullanılması MsgBoxVB6 (eğer bağlama yolunu kesmek, bir konsol çalıştırılabilir olarak bağlantı, bazı Windows API kesmek kullanmadıkça, ve diğer bazı yapmak konsol olmadığı için, çok tehlikeli şeyler).


3
Neden sadece değiştirmeyin mtarafından .m.? ie Debug.Print Replace(Format(Now,"hh:mm am/pm"),"m",".m.")
CompuChip

Nice @toothbrush, bunun CJam'da bir baytlık bir çözüm olmasını bekledim;)
CompuChip

4

R, 68 , 59 62 60 55

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

(Yorumlar için @ Alex.A teşekkürler. Ve @flodel) geçerli sistem saatini (Alır Sys.time()), doğru kullanarak biçimleri %I:%M%Pkombinasyonunu sonuna nokta ekler ve değiştirir mile .m..


4

Julia, 74 54 43 bayt

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

Şunları yapabilirsiniz çevrimiçi denemek !

time()Fonksiyon Geçerli saati döndürür. Geçirilen zaman strftimebiçimiyle %I:%M%P, bu sonuçların HH:MMam/pmsaat 12 saat başınadır. Biz birlikte bir karakter yedeklemek \bkaldırmak için mbir sondaki bırakarak aveya psonra tack .m.ucuna.

Kaydedilen 31 bayt Glen O sayesinde!


Bunu önerebilir miyim? print("It's ",strftime("%r%P",time())[[1:5,12]],".m.")- %Pkarşılaştırma ve split komutundan kaçınmak için küçük harf am / pm eklemek için kullanılır.
Glen O

Yardım ile ilgili sorun yok. Ve kendini konuşma - iyi misin. Ben sadece kod son her bayt sıkmak için çalışma dışarı olsun. Bu durumda, split komutunu ve koşullu ifadeyi atlamaya çalışmanın faydalı olacağını düşündüm ve sonra kullandığınız işlevlere baktım. Muhtemelen strftime'i kendim bulamazdım (zamanı doğrudan çıkarmaya time()
Glen O

1
@GlenO Her son baytı kod dışında sıkmaktan keyif alırsanız, PPCG kesinlikle sizin için doğru yer!
Alex A.

Bu arada, birkaç bayt daha sıkmak için bir yol buldum:print(strftime("It's %I:%M%P",time())[1:11],".m.")
Glen O

Aslında daha da iyisi:print(strftime("It's %I:%M%P\b.m.",time()))
Glen O

3

Haskell, 135 bayt

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

mainBeş bayt daha uzun çok daha eğlenceli buldum :

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

Veya Unix'te 66 bayt:

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

3

Pyth, 38 36 bayt

s["It's "|%J.d6K12K\:.d7?gJK\p\a".m.

@Jakube sayesinde 2 bayt kaydedildi!


@ Sp3000 Çevrimiçi tercümandan mı yoksa yerel olarak mı?
kirbyfan64sos

@ Sp3000 Sanırım sorunu biliyorum. Pyth sunucusunun konumunun zamanını veriyor ve gece yarısını doğru kullanmıyorum. Bekle ...
kirbyfan64sos

@ Sp3000 Sabit !!!
kirbyfan64sos

Neredeyse PHP cevabımı ve Doorknob'un Bash cevabını yeniyorsun!
Ismael Miguel

3

MATLAB, 59 bayt

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

17:38.

Eğer saat ve öğleden sonra / saat arasında boşluk olmasına izin verilirse, 52 bayt kadar düşük olabilir :

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

17:39


Bence çıktı olmalı05:38p.m.
Ismael Miguel

OP'nin açıklamasına göre, baştaki sıfır önemli değil.
slvrbld

Haklısın. İşte, benim oyumu al!
Ismael Miguel

Güzel! Böyle kullanabileceğimi bilmiyordum \b... Fazladan bir alana ihtiyacınız var btw.
Stewie Griffin

3

Perl 5.10+, 58 62 bayt

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

Almak için -M5.010komut satırı bayrağıyla çalıştırılmalıdır say.

Orijinal çözümümde ( 00:**ve 12:**) birkaç kenar durumu hesaba katmadım ; 4 ek bayt maliyetiyle sabitlendi.

Nasıl çalışır

Skaler bağlamda, şöyle localtimebir dize döndürür:

Sat Sep 12 03:13:22 2015

Dakika alanı zaten sıfır dolguludur, bu da bazı baytları kaydeder (liste bağlamında, localtimedizeler yerine sayıları döndürür, böylece bunları kendiniz doldurmanız gerekir).

İşte çözülmemiş:

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 bayt

(Sadece eğlence için, çünkü kuralları biraz uzatır.)

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

İçin 51 bayt + 6 bayt -MPOSIX. Almak için -M5.010komut satırı bayrağıyla da çalıştırılmalıdır say.

Bu çözüm bulunduğunuz yere bağlıdır, bu nedenle tüm sistemlerde çalışmaz. Ayrıca, çekirdek bir modül olmasına rağmen "yerleşik" tanımını genişletebilecek POSIX modülünü kullanır.

rİkame operatörünün tahribatsız değiştiricisi için Perl 5.14+ gereklidir . 5.10+ üzerinde çalışan eşdeğer bir çözüm:

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

Bu da 57 bayttır (51 bayt + 6 bayt için -MPOSIX).


3

Perl 5, 74 bayt

Değişkenlerin sağdan sola nasıl değerlendirildiğine dair küçük bir vitrin.

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

POSIX kullanma: 80 bayt

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

POSIX'i yerel ayar bağımlılığı ve anahtarlarıyla kullanma: 54 bayt (48 + 6)

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

Ölçek

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

1
Sen kullanarak POSIX çözümler üzerinde bazı bayt kaydedebilirsiniz -MPOSIXyerine use POSIX;, çağrınızda parens bırakarak strftimeve değiştirilmesi printile say( -M5.010ücretsiz ). Bu da son çözümünüzü 54 bayta indirir!
ThisSuitIsBlackNot

Teşekkürler. Tavsiyenizi en kısa POSIX çözümü için kullandım.
LukStorms

1
Hala saymak zorunda -MPOSIX(6 bayt), ancak parantez bırakarak 2 bayt kaydedebilirsiniz: $_=strftime"It's %I:%M%P",localtime;. Bu, toplam 54 bayt verir, bu da hala 57 bayt POSIX çözümümden daha iyidir. Aferin!
BuSuitIsBlackNot

Heh, birkaç baytı kurtardığın için tekrar teşekkürler.
LukStorms

3

CJam, 40 bayt

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

CJam yorumlayıcısında çevrimiçi deneyin .

Nasıl çalışır

"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 bayt

User202729 sayesinde -6 bayt

Çözüm Mathematica'da açık, ama biraz garip.

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

(Bu yazı oldukça eski olmasına rağmen) StringReplaceortadan kaldırılabilir, 6 bayt kaydedin. (d=DateString)@{"It's ","Hour12",":","Minute"}<>d@"AMPM"/."AM"->"a.m."/."PM"->"p.m."
user202729

2

T-SQL (2012+), 67 65 bayt

SQL Server 2012 nihayet bize tarihler için makul bir biçimlendirme işlevi verdi. Hala doğru olsa biçimini almak için AM / PM ile uğraşmak zorunda kaldı.

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

Önceki sürümlerde böyle bir şeye ihtiyaç duyacaktı (93 bayt)

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

2

PHP, 49 bayt

Keşke am/pmbunun yerine a.m./p.m....

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

Biraz uzunluk kaydetmek için bir sürü kötü bayt kullandım, işte altıgen:

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;

Okunabilir sürüm:

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

2

C, 103 94 bayt

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

Ungolfed

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 bayt

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

Bunu ilk kez oynadım. Ben önceki PHP cevap (49 bayt) güncellemek / düzenlemek ya da sadece kendi eklemek gerekiyorsa emin değilim ...


Her zaman kendinizinkini eklemelisiniz. Birisinin cevabına yalnızca birkaç bayt kaydedebilecek bir şey görürseniz yorum yaparsınız. Ama bunun dışında, güzel cevap!
Ismael Miguel

Bu arada, [m=>'.m.']2 bayt tasarruf sağlayan yazabilirsiniz . (Uyarılar göz ardı edilebilir, bu yüzden onlar için endişelenmeyin.)
Ismael Miguel

2

SQL (PostgreSQL), 42 41 bayt

Başka bir SQL varyantı, ancak bu bir sorguda.

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

As a note either p.m. or a.m. works to get the am/pm part. The formatting options in PostgreSQL are really quite flexible. Thanks to @manatwork for the tip to move the it's into the format string.

SQLFiddle


So you need to adjust am/pm it manually?
David Arenburg

@DavidArenburg, no it gets it right with either ... but I had to check it out, because it didn't seem right. If you add + time '12:00' after the now() in SQLFiddle it should change the am/pm.
MickyT

1 character shorter: select to_char(now(),'"It''s" HH:MIa.m.')
manatwork

@manatwork, very nice thanks. I wouldn't have thought of trying that.
MickyT

2

CJam, 43 bytes

Having to pad the numbers with zeroes makes this larger than I'd like. In the end, string formatting was the shortest way.

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

Try it online.

Explanation

   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
This fails for both the 12's. Instead of 12:37 it outputs 00:37.
Zach Gates

2

Javascript, 103 bytes

Javascript executed from the console.

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

C#, 63 bytes

C# executed from the immediate window.

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

Also runs as F# ;)
Stachu

You don't need to calculate d.length, you could just write -n and it will calculate from the end, just an FYI. d="It's "+new Date().toLocaleTimeString();d.slice(0,-6)+d.slice(-2,-1).toLowerCase()+'.m.' 90 bytes. And you can save one byte by moving the "It's " string. And a few bytes from a little string shortcut in there. d=new Date().toLocaleTimeString();"It's "+d.slice(0,5)+d[9].toLowerCase()+'.m.' 79 bytes.
Jan

And if the answer needs to be locale-independent (as some have posted), just use toLocaleTimeString("en-US") 86 bytes.
Jan

2

Bash, 44 characters

Pure Bash, just shell builtins, no ***utils.

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

Sample run:

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

2

Powershell, 49 bytes

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

(date).hour/23 seems to work as an index for "ap" because it rounds to 0 for hours less than 12 and 1 for 12 and above.


Should be able to golf off a few characters by instead treating the "p"/"a" as string turned into an implicit char-array -- 51 bytes -- "It's $(date -f hh:mm)$("pa"[(date).hour-lt12]).m."
AdmBorkBork

Your latest "{0:hh:mm}$("ap"[($d=date).hour/23]).m."-f$d misses the It's at the beginning. If you tack that onto the front, it's the same 49 bytes as "It's $((date -f hh:mm)+"ap"[(date).hour/23]).m."
AdmBorkBork

My bad. I've fixed it. Anyway, this version is more "correct", as it only makes a single call to date
Danko Durbić

For what it's worth, I stumbled across the following while researching something else. Apparently [datetime] casts are always en-US. That means something like this "It's $(("{0:h:mmt}"-f[datetime](date)).ToLower()).m." is possible ... which, granted, is 54 bytes and longer than your current solution, but still an interesting quirk of the language.
AdmBorkBork

@TimmyD Interesting, but it seems it's only casting to DateTime that's en-US, not formatting.
Danko Durbić

2

Locale-dependent

For browser environments that have the locale set to en-CA or any locale that outputs a 12-hour time by default:

CoffeeScript, 81 bytes

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

JavaScript (ES5), 90 bytes

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

Locale-independent

CoffeeScript, 113 96 bytes

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

Previous:

This one works in all browser environments regardless of locale. Requires Chrome 24+, Firefox 29+, IE 11+, Opera 15+ or any derivatives of such. Does not work in Safari. See Intl.DateTimeFormat.

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

The javascript answer gave me: It's 2:59: m.m.
Mwr247

@Mwr247 Which locale is your browser in?
rink.attendant.6

@rinkattendant6 My locale is en-US
Mwr247

2

Swift - 124 102 bytes

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

2

C, 154 bytes

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

In contrast to the other C answer, this one uses the correct "a.m."/"p.m." format. The other poster omitted #include <time.h> – if your compiler allows this, we get down to 136 bytes. Which one should we count?


You're right, in fact all I got was a warning – I got it confused with an error from trying to do without time.h. Editing.
mindriot

1

Moonscript - 56 bytes

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

Unfortunately the Lua standard library only implements %p for uppercase AM/PM, so I have to call the method lower.


1

SpecBAS - 64 bytes

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

The built-in p$ of the time function returns AM or PM, so this then has to be formatted with REPLACE$ to change it so it has a full stop before/after that letter.

Then the time output had to be converted to lowercase.


1

MATLAB, 66 bytes

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

Displays:

It's 2:48p.m.

1

Python 2, 75 67 66 bytes

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

old version, 75 bytes

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

old version, 75 bytes

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

@AlexA. Not working in Python 2 time.strftime at least under windows gives "ValueError: Invalid format string"
Max

@AlexA Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import time;print"It's %s.m."%time.strftime("%I:%M%p")[:6].lower() It's 01:30p.m.`
Max

1

Python 3, 117 87 79 bytes

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

This gets the hours and minutes from a 12-hour clock using the format %I:%M, plus am or pm using %P. We then select everything but the last m and append .m..

Saved a few bytes thanks to Ruth Franklin!


1
As you're only using datetime once, it's 6 bytes shorter to use from datetime import*; h=datetime.now() ...
Ruth Franklin

@RuthFranklin Thanks for the suggestion! I also found a few other ways to shorten it.
Alex A.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.