ruby中時間日期用法詳解

來源:互聯網
上載者:User

做web應用,和時間打交道是不可免的。rails對ruby的時間模組做了擴充。本文作於2011年1月29日, ruby版本為1.8.7, rails版本為3.0.3

基本的時間轉換
>> now=Time.now
=> Sat Jan 29 21:47:07 0800 2011
#utc秒數互相轉換
>> now.to_i
=> 1296308827
>> Time.at(1296308827)
=> Sat Jan 29 21:47:07 0800 2011
#目前時間的一些變數
>> now.sec
=> 7
>> now.min
=> 47
>> now.hour
=> 21
>> now.month
=> 1
>> now.year
=> 2011
#現在是星期幾(注意!!!周日是返回 0 )
>> now.wday
=> 6
#現在是本月第幾天
>> now.day
=> 29
#現在是今年第幾天
>> now.yday
=> 29
#時間參數的數組
>> now.to_a
=> [7, 47, 21, 29, 1, 2011, 6, 29, false, "CST"]

時間化輸出
>> now.strftime("%Y-%m-%d %H:%M:%S")
=> "2011-01-29 21:47:07"

參數解釋如下

  %a - 星期幾的英文簡寫 (``Sun'')
  %A - 星期幾的英文全稱 (``Sunday'')
  %b - 月份的英文簡寫 (``Jan'')
  %B - 月份的英文全稱 (``January'')
  %c - 預設的首選本地時間輸出格式
  %d - 本月第幾天 (01..31)
  %H - 24小時制的小時 (00..23)
  %I - 12小時制的小時 (01..12)
  %j - 今年的第幾天 (001..366)
  %m - 月份 (01..12)
  %M - 分鐘 (00..59)
  %p - 上午還是下午 (``AM''  or  ``PM'')
  %S - 秒數 (00..60)
  %U - 從星期天算一周開始的本年第幾周 (00..53)
  %W - 從星期一算一周開始的本年第幾周 (00..53)
  %w - 現在是星期幾 (周日是0 , 0..6)
  %x - 預設的日期輸出格式 ("01/29/11")
  %X - 預設的時間輸出格式 ("21:47:07")
  %y - 年份的後兩位 (00..99)
  %Y - 年份
  %Z - 時區名
  %% - 輸出%字元

以上是ruby的基本方法,rails對其做了更多的擴充

#重寫了to_s方法,能夠接受參數
>> now.to_s
=> "Sat Jan 29 21:47:07 +0800 2011"
>> now.to_s(:db)
=> "2011-01-29 21:47:07"
>> now.to_s(:number)
=> "20110129214707"
>> now.to_s(:time)
=> "21:47"
>> now.to_s(:short)
=> "29 Jan 21:47"
>> now.to_s(:long)
=> "January 29, 2011 21:47"
>> now.to_s(:long_ordinal)
=> "January 29th, 2011 21:47"
>> now.to_s(:rfc822)
=> "Sat, 29 Jan 2011 21:47:07 +0800"

如果要自己設計時間輸出格式,按下面方法來,建立一個設定檔

  # config/initializers/time_formats.rb
  Time::DATE_FORMATS[:month_and_year] = "%B %Y"
  Time::DATE_FORMATS[:short_ordinal] = lambda { |time| time.strftime("%B #{time.day.ordinalize}") }

rails對日期的一些擴充

#指定時間
>> now.change(:year=>2012, :month=>12, :day => 21, :hour => 0, :min => 0, :sec => 0, :usec => 0)
=> Fri Dec 21 00:00:00 0800 2012

#begginning家族
>> now.beginning_of_day
=> Sat Jan 29 00:00:00 0800 2011
>> now.midnight
=> Sat Jan 29 00:00:00 0800 2011
>> now.beginning_of_week
=> Mon Jan 24 00:00:00 0800 2011
>> now.beginning_of_month
=> Sat Jan 01 00:00:00 0800 2011
>> now.beginning_of_quarter
=> Sat Jan 01 00:00:00 0800 2011
>> now.beginning_of_year
=> Sat Jan 01 00:00:00 0800 2011
#end家族
>> now.end_of_day
=> Sat Jan 29 23:59:59 0800 2011
>> now.end_of_week
=> Sun Jan 30 23:59:59 0800 2011
>> now.end_of_month
=> Mon Jan 31 23:59:59 0800 2011
>> now.end_of_quarter
=> Thu Mar 31 23:59:59 0800 2011
>> now.end_of_year
=> Sat Dec 31 23:59:59 0800 2011
#時間的魔術方法
>> now.yesterday
=> Fri Jan 28 21:47:07 0800 2011
>> now.tomorrow
=> Sun Jan 30 21:47:07 0800 2011
>> now.next_week
=> Mon Jan 31 00:00:00 0800 2011
>> now.next_month
=> Mon Feb 28 21:47:07 0800 2011
>> now.next_year
#注意沒有prev_week
>> now.prev_month
=> Wed Dec 29 21:47:07 0800 2010
>> now.prev_year
=> Fri Jan 29 21:47:07 0800 2010
#今日已過秒數
>> now.seconds_since_midnight
=> 78427.615017
#日期輸出
>> now.to_date
=> Sat, 29 Jan 2011
>> now.to_datetime
=> Sat, 29 Jan 2011 21:47:07 0800
#按秒數計算
>> now.ago(3600)
=> Sat Jan 29 20:47:07 0800 2011
>> now.since(3600)
=> Sat Jan 29 22:47:07 0800 2011

實際上還有很多方法沒有列出,具體使用還是參考rails的api手冊為準。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.