Che ore sono, ragazzo?


18

Onestamente non posso credere che questa non sia ancora una domanda su Code Golf, ma ...

Stampa l'ora locale (con am o pm) come una stringa sulla console, preceduta da "It's".

Esempio:

Run code....

Produzione:

It's 12:32p.m.

Il codice più corto vince.

Codice via!

Classifica


1
Qual è il formato di output? Importa?
mbomb007,

1
No, voglio dire, dovrebbe essere yyyy-MM-dd hh:mm:ss UTCo il formato della data non ha importanza?
mbomb007,

8
Volevo davvero dare una risposta che stampasse It's beer o'clock, ma ho resistito.
MickyT,

4
Possiamo usare 12:32 PMo 12:32PM? Invece di 12:32p.m.?
Stewie Griffin,

3
Sono le 02:32 o le 2:32 se sono meno di 10:00?
Stewie Griffin,

Risposte:


18

Bash, 39 33 byte

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

Sprecato un sacco di caratteri perché le specifiche richiedono a.m.o p.m.mentre dateoutput amo pm. Grazie a @DigitalTrauma per aver salvato 6 byte!

Questo potrebbe non essere molto portatile. Funziona su Ubuntu 15.04.

Una soluzione che utilizza essenzialmente lo stesso metodo in Ruby , che è sorprendentemente della stessa identica lunghezza :

Rubino, 39 byte

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

%Pmi dà AM o PM maiuscoli. Sono su un mac se fa la differenza.
flodel,

@flodel Funziona su My Machine ™. Su Ubuntu 15.04, %Pfornisce %plettere minuscole e lettere maiuscole (che è un po '... non intuitivo).
Maniglia della porta

GNU date(su Linux et al.) E * BSD date(dove OSX è una variante di BSD) hanno opzioni e comportamenti incredibilmente diversi quando ci si avventura al di fuori del set di funzionalità specificato da POSIX. Quindi forse questa risposta dovrebbe menzionare specificamente Bash su Linux. ( sedAnche per questo; ma questa particolare invocazione è saldamente all'interno del set di funzionalità sicuro e portatile.)
tripleee

Sulla mia macchina (zsh o bash su Linux) stampa "Sono le 04:17". quando sono le 16:17. No "am" o "pm"
aditsu,

echo -e "It's $(date +%I:%M%P)\b.m."- Invece di sedutilizzare backspace. Non mi sembra una risposta separata. Inoltre non ho nessuna am / pm ma penso che sia a causa della localizzazione.
Aragaer,

13

AppleScript, 198

Perché AppleScript. Perché perché no:

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

È stato doloroso.


18
AppleScript è il nuovo Java.
Maniglia della porta

8

PHP, 35 33 byte

Utilizzando lo strumento sbagliato per il lavoro!

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

Rimuove semplicemente il malla fine di amo pm, per consentire di aggiungere i punti. La data arriva come 00:00ame con trimessa diventa 00:00a.


Vecchia risposta (solo PHP 5.4+):

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

Questo funziona perché puoi de-referenziare un valore restituito da una funzione. Questo non è possibile in PHP5.3 o precedenti.


Ah, intelligente! Hai battuto la mia risposta php
DankMemes l'

@DankMemes Mi ci è voluto un po 'di tempo. E molti esperimenti.
Ismael Miguel,

Hai usato una stringa letterale senza virgolette. Va bene usare quelli senza @operatore e supporre che le persone lo eseguiranno error_reporting(0)?
DankMemes,

@DankMemes È possibile supporre indirettamente che la segnalazione degli errori sia disabilitata. Ecco una buona lettura: meta.codegolf.stackexchange.com/a/1655/14732
Ismael Miguel,

5

Visual Basic 6 / VBA, 42 41 byte

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

Utilizzando MsgBox, poiché VB6 non ha una console (a meno che non si intercetti il ​​collegamento, si colleghi come eseguibile della console, si utilizzino alcuni hack delle API di Windows e si facciano altre cose pericolose ).


3
Perché non basta sostituire mda .m.? cioè Debug.Print Replace(Format(Now,"hh:mm am/pm"),"m",".m.")
CompuChip l'

Nice @toothbrush, mi aspettavo che questa fosse una soluzione a un byte in CJam;)
CompuChip

4

R, 68 , 59 62 60 55

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

(Grazie a @ Alex.A. E @flodel per i commenti) Prende l'ora corrente del sistema ( Sys.time()), la formatta correttamente usando la %I:%M%Pcombinazione, aggiunge un punto alla fine e sostituisce mcon .m..


4

Julia, 74 54 43 byte

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

Puoi provarlo online !

La time()funzione restituisce l'ora corrente. Se passato a strftimecon il formato %I:%M%P, questo si traduce in HH:MMam/pmdove le ore sono per un orologio di 12 ore. Eseguiamo il backup di un personaggio con \bper rimuovere il m, lasciando un trailing ao p, quindi virando .m.alla fine.

Risparmiato 31 byte grazie a Glen O!


Potrei suggerire questo? print("It's ",strftime("%r%P",time())[[1:5,12]],".m.")- usa %Pper aggiungere la minuscola am / pm, per evitare il confronto e il comando split.
Glen O,

Nessun problema per quanto riguarda l'aiuto. E non parlarti, stai bene. Mi diverto solo nel provare a spremere ogni ultimo byte dal codice. In questo caso, ho appena immaginato che provare a bypassare il comando split e l'istruzione condizionale sarebbe stato utile, quindi ho analizzato le funzioni che hai usato. Probabilmente non mi sarei trovato da solo (avrei cercato di estrarre il tempo direttamente da time())
Glen O

1
@GlenO Se ti diverti a spremere ogni ultimo byte fuori codice, PPCG è sicuramente il posto giusto per te!
Alex A.

Per inciso, ho trovato un modo per spremere qualche byte in più:print(strftime("It's %I:%M%P",time())[1:11],".m.")
Glen O

In realtà, anche meglio:print(strftime("It's %I:%M%P\b.m.",time()))
Glen O

3

Haskell, 135 byte

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

Ho trovato molto più divertente mainche è di cinque byte in più:

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

O 66 byte su Unix:

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

3

Pyth, 38 36 byte

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

Salvato 2 byte grazie a @Jakube!


@ Sp3000 Sull'interprete online o localmente?
kirbyfan64sos,

@ Sp3000 Penso di conoscere il problema. Sta dando il tempo della posizione del server Pyth e non gestisco correttamente la mezzanotte. Aspetta ...
kirbyfan64sos,

@ Sp3000 Fixed !!!
kirbyfan64sos,

Stai quasi battendo la mia risposta PHP e la risposta Bash di Doorknob!
Ismael Miguel,

3

MATLAB, 59 byte

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

Sono le 17:38.

Se è consentito avere uno spazio bianco tra ora e am / pm, potrebbe essere basso quanto 52 byte :

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

Sono le 17:39


Penso che l'uscita debba essere05:38p.m.
Ismael Miguel,

Secondo il commento di OP, lo zero iniziale non ha importanza.
slvrbld,

Hai ragione. Ecco, ho il mio voto!
Ismael Miguel,

Bello! Non sapevo che avrei potuto usare in \bquel modo ... Hai bisogno di uno spazio extra tra.
Stewie Griffin,

3

Perl 5.10+, 58 62 byte

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

Deve essere eseguito con il -M5.010flag della riga di comando per ottenere say.

Non ho tenuto conto di un paio di casi limite nella mia soluzione originale (vale a dire, 00:**e 12:**); risolto al costo di 4 byte aggiuntivi.

Come funziona

Nel contesto scalare, localtimerestituisce una stringa come questa:

Sat Sep 12 03:13:22 2015

Il campo dei minuti è già a zero, il che consente di salvare alcuni byte (nel contesto dell'elenco, localtimerestituisce numeri anziché stringhe, quindi è necessario riempirli da soli).

Qui è ungolfed:

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 byte

(Solo per divertimento, dal momento che allunga un po 'le regole.)

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

51 byte + 6 byte per -MPOSIX. Deve anche essere eseguito con il -M5.010flag della riga di comando per ottenere say.

Questa soluzione dipende dalle impostazioni locali, quindi non funzionerà su tutti i sistemi. Utilizza anche il modulo POSIX, che potrebbe estendere la definizione di "incorporato", anche se si tratta di un modulo principale.

Perl 5.14+ è necessario per il rmodificatore non distruttivo per l'operatore di sostituzione. Una soluzione equivalente che funziona su 5.10+ è:

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

Questo è anche 57 byte (51 byte + 6 byte per -MPOSIX).


3

Perl 5, 74 byte

Una piccola vetrina di come vengono valutate le variabili da destra a sinistra.

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

Utilizzando POSIX: 80 byte

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

Utilizzo di POSIX con dipendenza e opzioni della localizzazione oraria: 54 byte (48 + 6)

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

Test

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

1
È possibile salvare alcuni byte sulle soluzioni POSIX utilizzando -MPOSIXinvece di use POSIX;, facendo cadere le parentesi nella chiamata strftimee sostituendo printcon say( -M5.010è gratuito ). Il che porta la tua ultima soluzione a 54 byte!
ThisSuitIsBlackNon

Grazie. Ho usato i tuoi consigli per la soluzione POSIX più breve.
LukStorms,

1
Hai ancora a contare -MPOSIX(6 byte), ma è possibile risparmiare 2 byte facendo cadere le parentesi: $_=strftime"It's %I:%M%P",localtime;. Ciò dà 54 byte in totale, che è ancora meglio della mia soluzione POSIX a 57 byte. Molto bene!
ThisSuitIsBlackNon

Heh, grazie ancora per aver salvato qualche byte.
LukStorms,

3

CJam, 40 byte

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

Provalo online nell'interprete CJam .

Come funziona

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

-6 byte grazie a user202729

La soluzione è semplice, ma un po 'prolissa, in Mathematica.

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

(Anche se questo post è piuttosto vecchio) StringReplacepuò essere eliminato, risparmia 6 byte. (d=DateString)@{"It's ","Hour12",":","Minute"}<>d@"AMPM"/."AM"->"a.m."/."PM"->"p.m."
user202729

2

T-SQL (2012+), 67 65 byte

SQL Server 2012 ci ha finalmente fornito una ragionevole funzione di formattazione per le date. Tuttavia, ho dovuto ancora andare in giro con AM / PM per ottenere il formato giusto.

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

Nelle versioni precedenti avrebbe avuto bisogno di qualcosa del genere (93 byte)

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

2

PHP, 49 byte

Se solo fosse am/pminvece di a.m./p.m....

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

Ho usato molti byte cattivi per risparmiare un po 'di lunghezza, quindi ecco l'esagono:

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;

Versione leggibile:

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

2

C, 103 94 byte

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 byte

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

La prima volta che ci ho giocato. Non sono sicuro se dovrei aggiornare / modificare la precedente risposta PHP (49 byte) o semplicemente aggiungere il mio ...


Devi sempre aggiungere il tuo. Commenta la risposta di qualcuno solo se vedi qualcosa che può salvarlo di qualche byte. Ma a parte questo, bella risposta!
Ismael Miguel,

A proposito, puoi scrivere [m=>'.m.'], risparmiando 2 byte. (Gli avvisi possono essere ignorati, quindi non preoccuparti per loro.)
Ismael Miguel,

2

SQL (PostgreSQL), 42 41 byte

Un'altra variante SQL, tuttavia questa è in una query.

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

Come nota o pm o am funziona per ottenere la parte am / pm. Le opzioni di formattazione in PostgreSQL sono davvero abbastanza flessibili. Grazie a @manatwork per la punta per spostare la it'sstringa di formato.

SQLFiddle


Quindi è necessario regolarlo manualmente?
David Arenburg,

@DavidArenburg, no, non ha funzionato neanche con ... ma ho dovuto provarlo, perché non sembrava giusto. Se si aggiunge + time '12:00'dopo now()in SQLFiddle dovrebbe cambiare am / pm.
MickyT,

1 personaggio più corto:select to_char(now(),'"It''s" HH:MIa.m.')
arte

@manatwork, grazie davvero. Non avrei pensato di provarlo.
MickyT,

2

CJam, 43 byte

Dover riempire i numeri con zero rende questo più grande di quanto vorrei. Alla fine, la formattazione delle stringhe era il modo più breve.

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

Provalo online .

Spiegazione

   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
Questo fallisce per entrambi i 12. Invece di 12:37output 00:37.
Zach Gates,

2

Javascript, 103 byte

Javascript eseguito dalla console.

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

C #, 63 byte

C # eseguito dalla finestra immediata.

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

Funziona anche come F #;)
Stachu,

Non hai bisogno di calcolare d.length, potresti semplicemente scrivere -ne calcolerà dalla fine, solo un FYI. d="It's "+new Date().toLocaleTimeString();d.slice(0,-6)+d.slice(-2,-1).toLowerCase()+'.m.'90 byte. E puoi salvare un byte spostando la "It's "stringa. E a pochi byte da una piccola scorciatoia di stringa lì dentro. d=new Date().toLocaleTimeString();"It's "+d.slice(0,5)+d[9].toLowerCase()+'.m.'79 byte.
Jan

E se la risposta deve essere indipendente dalla locale (come alcuni hanno pubblicato), usa solo toLocaleTimeString("en-US")86 byte.
Jan

2

Bash, 44 caratteri

Pure Bash, solo shell incorporate, nessun *** utils.

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

Esecuzione di esempio:

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

2

Powershell, 49 byte

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

(date).hour/23sembra funzionare come un indice "ap"perché arrotonda 0per ore meno di 12 e 1per 12 e sopra.


Dovrebbe essere in grado di giocare a golf con pochi caratteri trattando invece la "p" / "a" come stringa trasformata in un array di caratteri implicito - 51 byte -"It's $(date -f hh:mm)$("pa"[(date).hour-lt12]).m."
AdmBorkBork

Il tuo ultimo "{0:hh:mm}$("ap"[($d=date).hour/23]).m."-f$dmanca It's all'inizio. Se lo affronti sul davanti, sono gli stessi 49 byte di"It's $((date -f hh:mm)+"ap"[(date).hour/23]).m."
AdmBorkBork

Colpa mia. L'ho risolto. Comunque, questa versione è più "corretta", in quanto effettua una sola chiamata adate
Danko Durbić,

Per quello che vale, mi sono imbattuto in quanto segue mentre cercavo qualcos'altro. Apparentemente i [datetime]cast sono sempre negli Stati Uniti . Ciò significa che "It's $(("{0:h:mmt}"-f[datetime](date)).ToLower()).m."è possibile qualcosa del genere ... che, garantito, è di 54 byte e più lungo della soluzione attuale, ma comunque una stranezza interessante della lingua.
AdmBorkBork,

@TimmyD Interessante, ma sembra che stia trasmettendo solo a DateTime che è en-US, non formattazione.
Danko Durbić,

2

Locale-dipendente

Per gli ambienti browser che hanno le impostazioni internazionali impostate su en-CAo qualsiasi impostazione locale che genera un orario di 12 ore per impostazione predefinita:

CoffeeScript, 81 byte

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

JavaScript (ES5), 90 byte

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

Locale indipendente

CoffeeScript, 113 96 byte

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

Precedente:

Questo funziona in tutti gli ambienti browser indipendentemente dalle impostazioni locali. Richiede Chrome 24+, Firefox 29+, IE 11+, Opera 15+ o qualsiasi suo derivato. Non funziona in Safari. Vedere Intl.DateTimeFormat.

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

La risposta javascript mi ​​ha dato:It's 2:59: m.m.
Mwr247,

@ Mwr247 In quale locale si trova il tuo browser?
rink.attendant.6

@ rinkattendant6 Il mio locale èen-US
Mwr247

2

Swift - 124 102 byte

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

2

C, 154 byte

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

A differenza dell'altra risposta C, questa utilizza il formato "am" / "pm" corretto. L'altro poster è stato omesso #include <time.h>: se il compilatore lo consente, scendiamo a 136 byte. Quale dovremmo contare?


Hai ragione, in effetti tutto ciò che ho ricevuto è stato un avvertimento: l'ho confuso con un errore nel tentativo di farne a meno time.h. La modifica.
Mindriot

1

Moonscript - 56 byte

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

Sfortunatamente la libreria standard Lua implementa solo% p per AM / PM maiuscole, quindi devo chiamare il metodo in basso.


1

SpecBAS - 64 byte

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

La funzione incorporata p$della funzione Time restituisce AM o PM, quindi deve essere formattata REPLACE$per cambiarla in modo che sia completamente ferma prima / dopo quella lettera.

Quindi l'output temporale doveva essere convertito in minuscolo.


1

MATLAB, 66 byte

['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 byte

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

vecchia versione, 75 byte

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

vecchia versione, 75 byte

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

@AlexA. Non funziona in Python 2 time.strftime almeno sotto Windows da "ValueError: string di formato non valido"
Max

@AlexA Python 2.7.10 (impostazione predefinita, 23 maggio 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] su win32 Digitare "help", "copyright", "credits" o "licence" per ulteriori informazioni informazione. >>> tempo di importazione; stampa "It's% sm"% time.strftime ("% I:% M% p") [: 6] .lower () Sono le 13:30.
Max

1

Python 3, 117 87 79 byte

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

Ciò ottiene le ore e i minuti da un orologio di 12 ore utilizzando il formato %I:%M, più amo pmutilizzando %P. Selezioniamo quindi tutto tranne l'ultimo me aggiungiamo .m..

Risparmiato qualche byte grazie a Ruth Franklin!


1
Dato che stai usando solo datetimeuna volta, è più breve di 6 byte da usarefrom datetime import*; h=datetime.now() ...
Ruth Franklin

@RuthFranklin Grazie per il suggerimento! Ho anche trovato alcuni altri modi per accorciarlo.
Alex A.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.