2012-06-28 19 views
14

In un programma Ruby 1.9, desidero formattare l'ora corrente come Thu 1:51 PM. Quale codice di formato devo usare per l'ora del giorno (1 in questo esempio)?Come si scrive l'ora dell'ora senza zero iniziale o spazio iniziale?

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

%I presenta uno zero (01). %l ha uno spazio iniziale ( 1). Non vedo nessun altro codice di formato per l'ora nello strftime documentation. Non riesco a utilizzare .lstrip perché lo spazio si trova nel mezzo della stringa. Potrei usare .gsub(/ +/, " "), ma mi chiedo se c'è un modo meno hacky e semplice.

risposta

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

Scrivi %-l invece di %l. Le strisce - conducono spazi e zeri.

È possibile utilizzare anche - con gli altri codici di formato. La documentazione Strymo di Ruby menziona anche %-m e %-d, anche se non riesce a menzionare che è possibile utilizzare - con qualsiasi codice. Pertanto, %-I darebbe lo stesso risultato di %-l. Ma raccomando %-l, perché usare l invece di I significa a me che non si desidera nulla all'inizio - lo spazio che scrive sembra più casuale.

È anche possibile vedere an exhaustive list of Ruby 1.8strftime format codes, tra cui quelli con - e le sintassi simili _ e 0. Dice che Ruby 1.8 su Mac OS X non supporta quelle sintassi estese, ma non ti preoccupare: funzionano in Ruby 1.9 sulla mia macchina OS X.

+0

Vorrei che ogni soluzione fosse così semplice e diretta. +1 – flarn2006

+0

Questa soluzione potrebbe funzionare solo su sistemi Unix, non su Windows. [Questa risposta a "Python' strftime' - data senza prima 0? "] (Https://stackoverflow.com/a/2073189/578288) riguarda lo stesso compito in Python e dice che'% -' funziona solo su Unix. [Perché "% -d" o "% -e" rimuove lo spazio iniziale o zero?] (Https://stackoverflow.com/q/28894172/578288) dice che l'incompatibilità è dovuta al fatto che Python chiama il sistema dell'operatore sottostante 'strftime', che potrebbe avere estensioni specifiche della piattaforma. Non so se Ruby's 'strftime' è lo stesso. –