¿Qué hora es, muchacho?


18

Honestamente, no puedo creer que esta no sea una pregunta sobre Code Golf, pero ...

Imprima la hora local (con am o pm) como una cadena en la consola, precedida por "Es".

Ejemplo:

Run code....

Salida:

It's 12:32p.m.

El código más corto gana.

Código de distancia!

Tabla de clasificación


1
¿Cuál es el formato de salida? ¿Importa?
mbomb007

1
No, quiero decir, ¿debería ser yyyy-MM-dd hh:mm:ss UTCo no importa ese formato de fecha?
mbomb007

8
Tenía muchas ganas de poner una respuesta que imprima It's beer o'clock, pero me resistí.
MickyT

44
¿Podemos usar 12:32 PMo 12:32PM? En lugar de 12:32p.m.?
Stewie Griffin

3
¿Son las 02:32 o 2:32 si son menos de las 10:00?
Stewie Griffin

Respuestas:


18

Bash, 39 33 bytes

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

Se desperdicia un montón de caracteres porque la especificación requiere a.m.o p.m.mientras datesalidas amo pm. ¡Gracias a @DigitalTrauma por guardar 6 bytes!

Esto podría no ser muy portátil. Funciona en Ubuntu 15.04.

Una solución que utiliza esencialmente el mismo método en Ruby , que sorprendentemente tiene la misma longitud :

Ruby, 39 bytes

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

%Pme da mayúsculas AM o PM. Estoy en una Mac si hace la diferencia.
flodel

@flodel funciona en mi máquina ™. En Ubuntu 15.04, %Pda minúsculas y %pmayúsculas (que es un poco ... poco intuitivo).
Pomo de la puerta

GNU date(en Linux et al.) Y * BSD date(donde OSX es una variante BSD) tienen opciones y comportamientos muy diferentes cuando se aventura fuera del conjunto de características especificado por POSIX. Entonces, tal vez esta respuesta debería mencionar específicamente Bash en Linux. (Eso va por seddemasiado, pero esta invocación particular es firmemente dentro del conjunto de características de seguridad y portátil.)
tripleee

En mi máquina (zsh o bash en Linux) imprime "Son las 04:17". cuando son las 16:17. No "am" o "pm"
aditsu

echo -e "It's $(date +%I:%M%P)\b.m."- en lugar de sedusar retroceso. No me parece una respuesta separada. Además, no tengo ninguna am / pm pero creo que es por la configuración regional.
aragaer

13

AppleScript, 198

Porque AppleScript. Porque, porque 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."

Eso fue doloroso.


18
AppleScript es el nuevo Java.
Pomo de la puerta

8

PHP, 35 33 bytes

¡Usando la herramienta incorrecta para el trabajo!

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

Simplemente elimina mal final de amo pm, para permitir agregar los puntos. La fecha viene como 00:00am, y con trimella se convierte 00:00a.


Respuesta anterior (solo PHP 5.4+):

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

Esto funciona porque puede desreferenciar un valor devuelto por una función. Esto no es posible en PHP5.3 o anterior.


Ah, listo!
Superaste

@DankMemes Me llevó bastante tiempo. Y mucha experimentación.
Ismael Miguel

Usaste un literal de cadena sin comillas. ¿Está bien usar aquellos sin el @operador y asumir que las personas lo ejecutarán error_reporting(0)?
DankMemes

@DankMemes Puede suponer indirectamente que los informes de errores están deshabilitados. Aquí hay una buena lectura: meta.codegolf.stackexchange.com/a/1655/14732
Ismael Miguel

5

Visual Basic 6 / VBA, 42 41 bytes

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

Usando MsgBox, ya que VB6 no tiene una consola (a menos que intercepte el enlace, enlace como ejecutable de la consola, use algunos hacks de API de Windows y haga otras cosas poco fiables ).


3
¿Por qué no acaba de cambiar mpor .m.? es decir Debug.Print Replace(Format(Now,"hh:mm am/pm"),"m",".m.")
CompuChip

Nice @toothbrush, esperaba que fuera una solución de un byte en CJam;)
CompuChip

4

R, 68 , 59 62 60 55

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

(Gracias a @ Alex.A. Y @flodel por los comentarios) Toma la hora actual del sistema ( Sys.time()), la formatea correctamente usando la %I:%M%Pcombinación, agrega un punto al final y reemplaza el mcon .m..


4

Julia, 74 54 43 bytes

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

¡Puedes probarlo en línea !

La time()función devuelve la hora actual. Cuando se pasa a strftimecon el formato %I:%M%P, esto da como resultado HH:MMam/pm, donde las horas son por un reloj de 12 horas. Hacemos una copia de seguridad de un personaje con \bpara eliminar el m, dejando un final ao p, luego, clavamos .m.al final.

Guardado 31 bytes gracias a Glen O!


¿Puedo sugerir esto? print("It's ",strftime("%r%P",time())[[1:5,12]],".m.")- Se utiliza %Ppara agregar las minúsculas am / pm, para evitar la comparación y el comando dividir.
Glen O

No hay problemas con respecto a la ayuda. Y no te decepciones, lo haces bien. Simplemente disfruto al tratar de exprimir hasta el último byte del código. En este caso, me di cuenta de que tratar de omitir el comando de división y la declaración condicional sería beneficioso, y luego analicé las funciones que usó. Probablemente no hubiera encontrado yo mismo el tiempo de espera (habría tratado de extraer el tiempo directamente de time())
Glen O

1
@GlenO Si disfrutas al exprimir hasta el último byte del código, ¡PPCG es sin duda el lugar adecuado para ti!
Alex A.

Por cierto, he encontrado una manera de exprimir algunos bytes más:print(strftime("It's %I:%M%P",time())[1:11],".m.")
Glen O

En realidad, aún mejor:print(strftime("It's %I:%M%P\b.m.",time()))
Glen O

3

Haskell, 135 bytes

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

Encontré mucho más divertido mainque son cinco bytes más largos:

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

O 66 bytes en Unix:

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

3

Pyth, 38 36 bytes

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

¡Ahorré 2 bytes gracias a @Jakube!


@ Sp3000 ¿En el intérprete en línea o localmente?
kirbyfan64sos

@ Sp3000 Creo que sé el problema. Está dando la hora de la ubicación del servidor Pyth, y no estoy manejando la medianoche correctamente. Espera ...
kirbyfan64sos

@ Sp3000 fijo !!!
kirbyfan64sos

¡Casi estás superando mi respuesta PHP y la respuesta Bash de Doorknob!
Ismael Miguel

3

MATLAB, 59 bytes

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

Son las 5:38 p.m.

Si se le permite tener un espacio en blanco entre la hora y am / pm, entonces podría ser tan bajo como 52 bytes :

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

Son las 5:39 pm


Creo que la salida debe ser05:38p.m.
Ismael Miguel

Según el comentario de OP, el cero inicial no importa.
slvrbld

Tienes razón. ¡Aquí tienes mi voto!
Ismael Miguel

¡Agradable! No sabía que podría usar \basí ... Necesitas un espacio extra por cierto.
Stewie Griffin

3

Perl 5.10+, 58 62 bytes

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

Debe ejecutarse con el -M5.010indicador de línea de comando para obtener say.

No tomé en cuenta un par de casos extremos en mi solución original (a saber, 00:**y 12:**); corregido a un costo de 4 bytes adicionales.

Cómo funciona

En contexto escalar, localtimedevuelve una cadena como esta:

Sat Sep 12 03:13:22 2015

El campo de minutos ya está rellenado con ceros, lo que ahorra algunos bytes (en el contexto de la lista, localtimedevuelve números en lugar de cadenas, por lo que debe rellenarlos usted mismo).

Aquí no tiene golf:

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 bytes

(Solo por diversión, ya que estira un poco las reglas).

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

51 bytes + 6 bytes para -MPOSIX. También debe ejecutarse con el -M5.010indicador de línea de comando para obtener say.

Esta solución depende de su entorno local, por lo que no funcionará en todos los sistemas. También usa el módulo POSIX, que podría estar ampliando la definición de un "incorporado", a pesar de que es un módulo central.

Se requiere Perl 5.14+ para el rmodificador no destructivo del operador de sustitución. Una solución equivalente que funciona en 5.10+ es:

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

Esto también es 57 bytes (51 bytes + 6 bytes para -MPOSIX).


3

Perl 5, 74 bytes

Una pequeña muestra de cómo se evalúan las variables de derecha a izquierda.

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

Usando POSIX: 80 bytes

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

Uso de POSIX con dependencia de tiempo local y conmutadores: 54 bytes (48 + 6)

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

Prueba

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

1
Puede guardar algunos bytes en sus soluciones POSIX utilizando en -MPOSIXlugar de use POSIX;, soltando los parens en su llamada strftimey reemplazándolos printcon say( -M5.010es gratis ). ¡Lo que reduce su última solución a 54 bytes!
ThisSuitIsBlackNot

Gracias. Utilicé su consejo para la solución POSIX más corta.
LukStorms

1
Usted todavía tiene que contar -MPOSIX(6 bytes), pero se puede ahorrar 2 bytes dejando caer los paréntesis: $_=strftime"It's %I:%M%P",localtime;. Eso da 54 bytes en total, que aún es mejor que mi solución POSIX de 57 bytes. ¡Bien hecho!
ThisSuitIsBlackNot

Je, gracias de nuevo por rescatar algunos bytes.
LukStorms

3

CJam, 40 bytes

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

Pruébelo en línea en el intérprete de CJam .

Cómo funciona

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

-6 bytes gracias al usuario202729

La solución es sencilla, pero un poco prolija, en Mathematica.

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

(Aunque esta publicación es bastante antigua) StringReplacese puede eliminar, guarde 6 bytes. (d=DateString)@{"It's ","Hour12",":","Minute"}<>d@"AMPM"/."AM"->"a.m."/."PM"->"p.m."
user202729

2

T-SQL (2012+), 67 65 bytes

SQL Server 2012 finalmente nos dio una función de formato razonable para las fechas. Sin embargo, todavía tenía que jugar con AM / PM para obtener el formato correcto.

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

En versiones anteriores, habría necesitado algo como esto (93 bytes)

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

2

PHP, 49 bytes

Si solo fuera en am/pmlugar de a.m./p.m....

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

Utilicé muchos bytes desagradables para ahorrar un poco de longitud, así que aquí está el hexadecimal:

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;

Versión legible:

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

2

C, 103 94 bytes

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

Sin golf

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 bytes

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

La primera vez que jugué esto. No estoy seguro si se supone que debo actualizar / editar la respuesta PHP anterior (49 bytes) o simplemente agregar la mía ...


Usted debe siempre añadir su. Solo comentas la respuesta de alguien si ves algo que puede ahorrarle unos pocos bytes. Pero aparte de eso, ¡buena respuesta!
Ismael Miguel

Por cierto, puedes escribir [m=>'.m.'], lo que ahorra 2 bytes. (Las advertencias pueden ignorarse, así que no te preocupes por ellas.)
Ismael Miguel

2

SQL (PostgreSQL), 42 41 bytes

Otra variante de SQL, sin embargo, esta está en una consulta.

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

Como nota, pm o am trabaja para obtener la parte am / pm. Las opciones de formato en PostgreSQL son realmente bastante flexibles. Gracias a @manatwork por la sugerencia para mover la it'scadena de formato.

SQLFiddle


¿Entonces necesita ajustar am / pm manualmente?
David Arenburg

@DavidArenburg, no, tampoco lo hace bien ... pero tuve que comprobarlo, porque no parecía correcto. Si agrega + time '12:00'después now()de SQLFiddle, debería cambiar am / pm.
MickyT

1 personaje más corto:select to_char(now(),'"It''s" HH:MIa.m.')
manatwork

@manatwork, muy bien, gracias. No hubiera pensado en intentar eso.
MickyT

2

CJam, 43 bytes

Tener que rellenar los números con ceros lo hace más grande de lo que me gustaría. Al final, el formato de cadena fue el camino más corto.

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

Pruébalo en línea .

Explicación

   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
Esto falla tanto para los 12. En lugar de 12:37que salga 00:37.
Zach Gates

2

Javascript, 103 bytes

Javascript ejecutado desde la consola.

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 # ejecutado desde la ventana inmediata.

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

También funciona como F #;)
Stachu

No necesita calcular d.length, simplemente puede escribir -ny calculará desde el final, solo un FYI. d="It's "+new Date().toLocaleTimeString();d.slice(0,-6)+d.slice(-2,-1).toLowerCase()+'.m.'90 bytes. Y puede guardar un byte moviendo la "It's "cadena. Y unos pocos bytes de un pequeño atajo de cadena allí. d=new Date().toLocaleTimeString();"It's "+d.slice(0,5)+d[9].toLowerCase()+'.m.'79 bytes.
Jan

Y si la respuesta debe ser independiente de la configuración regional (como algunos han publicado), solo use toLocaleTimeString("en-US")86 bytes.
ene

2

Bash, 44 caracteres

Pure Bash, solo conchas incorporadas, sin *** utilidades

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

Ejecución de muestra:

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/23parece funcionar como un índice para "ap"porque se redondea 0por horas menos de 12 y 1por 12 y más.


Debería poder jugar unos pocos caracteres al tratar la "p" / "a" como una cadena convertida en una matriz de caracteres implícita - 51 bytes -"It's $(date -f hh:mm)$("pa"[(date).hour-lt12]).m."
AdmBorkBork

Tu último se "{0:hh:mm}$("ap"[($d=date).hour/23]).m."-f$dpierde It's al principio. Si pega eso en el frente, son los mismos 49 bytes que"It's $((date -f hh:mm)+"ap"[(date).hour/23]).m."
AdmBorkBork

Culpa mía. Lo he arreglado De todos modos, esta versión es más "correcta", ya que sólo se hace una sola llamada adate
Danko Durbić

Por lo que vale, me topé con lo siguiente mientras investigaba algo más. Al parecer, los [datetime]elencos son siempre en EE . Eso significa que algo como esto "It's $(("{0:h:mmt}"-f[datetime](date)).ToLower()).m."es posible ... que, concedido, es 54 bytes y más largo que su solución actual, pero sigue siendo una peculiaridad interesante del lenguaje.
AdmBorkBork

@TimmyD Interesante, pero parece que solo se está transmitiendo a DateTime que está en EE. UU., No formateando.
Danko Durbić

2

Depende de la localidad

Para entornos de navegador que tienen la configuración regional establecida en-CAo cualquier configuración regional que genera un tiempo de 12 horas de forma predeterminada:

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

Independiente de la localidad

CoffeeScript, 113 96 bytes

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

Anterior:

Este funciona en todos los entornos de navegador, independientemente de la configuración regional. Requiere Chrome 24+, Firefox 29+, IE 11+, Opera 15+ o cualquier derivado de los mismos. No funciona en Safari. Ver Intl.DateTimeFormat.

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

La respuesta de JavaScript me dio:It's 2:59: m.m.
Mwr247

@ Mwr247 ¿En qué configuración regional está su navegador?
rink.attendant.6

@ rinkattendant6 Mi ubicación esen-US
Mwr247

2

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

A diferencia de la otra respuesta C, esta usa el formato correcto "am" / "pm". El otro póster se omitió #include <time.h>: si su compilador lo permite, lo reduciremos a 136 bytes. ¿Cuál deberíamos contar?


Tienes razón, de hecho, todo lo que recibí fue una advertencia: lo confundí con un error al intentar prescindir de él time.h. Edición.
mindriot

1

Moonscript - 56 bytes

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

Desafortunadamente, la biblioteca estándar de Lua solo implementa% p para mayúsculas AM / PM, por lo que tengo que llamar al método más bajo.


1

SpecBAS - 64 bytes

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

La función incorporada p$de la hora devuelve AM o PM, por lo que debe formatearse conREPLACE$ para cambiarla, de modo que se detenga por completo antes / después de esa letra.

Luego, la salida de tiempo tuvo que convertirse a minúsculas.


1

MATLAB, 66 bytes

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

Muestra:

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()

versión anterior, 75 bytes

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

versión anterior, 75 bytes

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

@AlexA. No funciona en Python 2 time.strftime al menos en Windows da "ValueError: Cadena de formato no válida"
Máximo

@AlexA Python 2.7.10 (predeterminado, 23 de mayo de 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] en win32 Escriba "ayuda", "copyright", "créditos" o "licencia" para más información. >>> tiempo de importación; imprima "It's% sm"% time.strftime ("% I:% M% p") [: 6] .lower () Son las 01:30 p.m.
Máx.

1

Python 3, 117 87 79 bytes

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

Esto obtiene las horas y minutos de un reloj de 12 horas usando el formato %I:%M, más amo pmusando %P. Luego seleccionamos todo menos el último my agregamos .m..

¡Ahorré algunos bytes gracias a Ruth Franklin!


1
Como solo está usando datetimeuna vez, es 6 bytes más corto de usarfrom datetime import*; h=datetime.now() ...
Ruth Franklin

@RuthFranklin ¡Gracias por la sugerencia! También encontré algunas otras formas de acortarlo.
Alex A.
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.