2012-06-28 23 views
14

Trong chương trình Ruby 1.9, tôi muốn định dạng thời gian hiện tại như Thu 1:51 PM. Tôi nên sử dụng mã định dạng nào cho giờ trong ngày (1 trong ví dụ này)?Làm cách nào để viết giờ của thời gian mà không có không gian hàng đầu hoặc không gian hàng đầu?

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

%I có số 0 đứng đầu (01). %l có không gian hàng đầu ( 1). Tôi không thấy bất kỳ mã định dạng nào khác cho giờ trong số strftime documentation. Tôi không thể sử dụng .lstrip vì không gian nằm ở giữa chuỗi. Tôi có thể sử dụng .gsub(/ +/, " "), nhưng tôi tự hỏi liệu có cách nào ít hacky và đơn giản hơn không.

Trả lời

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

Viết %-l thay vì %l. Các - dải không gian hàng đầu và số không.

Bạn cũng có thể sử dụng - cùng với các mã định dạng khác. Tài liệu của Ruby strftime thậm chí còn đề cập đến %-m%-d, mặc dù nó không đề cập đến việc bạn có thể sử dụng - với bất kỳ mã nào. Do đó, %-I sẽ cho kết quả tương tự như %-l. Nhưng tôi khuyên bạn nên %-l, bởi vì việc sử dụng l thay vì I biểu thị với tôi rằng bạn không muốn bất kỳ điều gì lúc đầu - không gian nó viết trông có vẻ ngẫu nhiên hơn.

Bạn cũng có thể xem an exhaustive list of Ruby 1.8strftime format codes, bao gồm cả những cái có - và các cú pháp tương tự _0. Nó nói rằng Ruby 1.8 trên Mac OS X không hỗ trợ các cú pháp mở rộng đó, nhưng đừng lo lắng: chúng hoạt động trong Ruby 1.9 trên máy OS X của tôi.

+0

Chúc mọi giải pháp đều đơn giản và dễ hiểu. +1 – flarn2006

+0

Giải pháp này có thể chỉ hoạt động trên các hệ thống Unix chứ không phải trên Windows. [Câu trả lời này cho "Python' strftime' - ngày không có 0 hàng đầu? "] (Https://stackoverflow.com/a/2073189/578288) là về cùng một nhiệm vụ trong Python, và nói rằng'% -' chỉ hoạt động trên Unix. [Tại sao "% -d", hoặc "% -e" loại bỏ không gian hàng đầu hoặc số không?] (Https://stackoverflow.com/q/28894172/578288) nói rằng sự không tương thích là bởi vì Python gọi hệ điều hành cơ bản của 'strftime', có thể có các tiện ích mở rộng nền tảng cụ thể. Tôi không biết liệu 'strftime' của Ruby có giống nhau hay không. –

Các vấn đề liên quan