2012-06-28 11 views
14

En un programa de Ruby 1.9, quiero formatear la hora actual como Thu 1:51 PM. ¿Qué código de formato debo usar para la hora del día (1 en este ejemplo)?¿Cómo escribo la hora del tiempo sin un cero inicial o espacio inicial?

Time.now.strftime '%a %I:%M %p' #=> "Thu 01:51 PM" 
Time.now.strftime '%a %l:%M %p' #=> "Thu 1:51 PM" 

%I tiene un cero (01). %l tiene un espacio líder ( 1). No veo ningún otro código de formato para la hora en el strftime documentation. No puedo usar .lstrip porque el espacio está en el medio de la cadena. Podría usar .gsub(/ +/, " "), pero me pregunto si hay una manera menos hacky, más simple.

Respuesta

36
Time.now.strftime '%a %-l:%M %p' #=> "Thu 1:51 PM" 

Escribir %-l en lugar de %l. El - elimina espacios principales y ceros.

También puede usar - con los otros códigos de formato. La documentación de Ruby strftime incluso menciona %-m y %-d, aunque no menciona que puede usar - con cualquier código. Por lo tanto, %-I daría el mismo resultado que %-l. Pero recomiendo %-l, porque usar l en lugar de I significa para mí que no quieres nada al principio: el espacio que escribe parece más accidental.

También puede ver an exhaustive list of Ruby 1.8strftime format codes, incluyendo los que tienen - y las sintaxis similares _ y 0. Dice que Ruby 1.8 en Mac OS X no admite esas sintaxis ampliadas, pero no se preocupe: funcionan en Ruby 1.9 en mi máquina OS X.

+0

Ojalá que cada solución fuera así de simple y directa. +1 – flarn2006

+0

Esta solución podría funcionar solo en sistemas Unix, no en Windows. [Esta respuesta a "Python' strftime' - date without leading 0? "] (Https://stackoverflow.com/a/2073189/578288) es sobre la misma tarea en Python, y dice que'% -' solo funciona en Unix. [¿Por qué "% -d", o "% -e" elimina el espacio inicial o cero?] (Https://stackoverflow.com/q/28894172/578288) dice que la incompatibilidad se debe a que Python llama al sistema subyacente del operador 'strftime', que puede tener extensiones específicas de la plataforma. No sé si el '' strftime'' de Ruby es el mismo. –

Cuestiones relacionadas