Ruby Time and Date

Published on:
Tags: ruby

圖片來源
フリー写真素材ぱくたそ

內容是我在準備認證考試時,看文件所留下的一些紀錄

Time

Time.newTime.now 一樣,都是回傳現在時間

Time 相減會是 Float 類型

Time + 1 是加一秒

取得時間欄位

> time = Time.new
=> 2017-03-05 21:36:21 +0800

> time.year
=> 2017

> time.month
=> 3

> time.day
=> 5

建立 Time

> Time.mktime(2010)
=> 2010-01-01 00:00:00 +0800

> Time.mktime(2010, 7)
=> 2010-07-01 00:00:00 +0800

> Time.mktime(2010, 7, 7)
=> 2010-07-07 00:00:00 +0800

從字串轉成 Time

> require "time"
=> true

> Time.parse("2010-7-7")
=> 2010-07-07 00:00:00 +0800

格式化時間

> time = Time.new
=> 2017-03-05 21:36:21 +0800

> time.strftime("%Y-%m-%d")
=> "2017-03-05"

> require "time"
=> true

> time.rfc2822 # 符合 email header 的 format

=> "Sun, 05 Mar 2017 21:45:25 +0800"

> time.ios8601

> time.utc # 轉成 utc 時間,破壞性方法

=> 2017-03-05 13:45:25 UTC

> time.localtime # 轉成當地時間,破壞性方法

=> 2017-03-05 21:45:25 +0800

Date

使用 Date 需要 require "date"

Date 相減會是 Rational 類型

Date + 1 是加一天

Date >> 1 是加一個月,Date << 1 是減一個月

建立 Date

> require "date"
=> true

> Date.today
=> #<Date: 2017-03-05 ((2457818j,0s,0n),+0s,2299161j)>


> Date.new(2013, 2, -1) # 2013/2/28

=> #<Date: 2013-02-28 ((2456352j,0s,0n),+0s,2299161j)>


> Date.new(2016, 2, -1) # 2013/2/29

=> #<Date: 2016-02-29 ((2457448j,0s,0n),+0s,2299161j)>


> Date.parse("2010-7-7")
=> #<Date: 2010-07-07 ((2455385j,0s,0n),+0s,2299161j)>

日期遞增與遞減

> require "date"
=> true

> date = Date.today
=> #<Date: 2017-03-05 ((2457818j,0s,0n),+0s,2299161j)>


> date >> 1 # 下個月

=> #<Date: 2017-04-05 ((2457849j,0s,0n),+0s,2299161j)>


> date << 1 # 上個月

=> #<Date: 2017-02-05 ((2457790j,0s,0n),+0s,2299161j)>

格式化時間

> require "date"
=> true

> date = Date.today
=> #<Date: 2017-03-05 ((2457818j,0s,0n),+0s,2299161j)>


> date.strftime("%Y-%m-%d %H:%M:%S") # 小時以下的時間皆為 0

=> "2017-03-05 00:00:00"

DateTime

基本上與 Date 大同小異,但會紀錄到小時以下的時間

> require "date"
=> true

> datetime = DateTime.now # 用 now 方法取得現在時間

=> #<DateTime: 2017-03-05T22:00:33+08:00 ((2457818j,50433s,289029000n),+28800s,2299161j)>


> datetime.strftime("%Y-%m-%d %H:%M:%S")
=> "2017-03-05 22:00:33"

格式化參考

符號 說明
%A Sunday, Monday, ...
%a Sun, Mon, ...
%B January, February, ...
%b Jan, Feb, ...
%c 時間
%d 日 (01 - 31)
%H 24 小時 (00 - 23)
%l 12 小時 (01 - 12)
%j 一年中的第幾天 (001 - 366)
%M 分 (00 - 59)
%m 月 (01 - 12)
%p AM, PM
%S 秒 (00 - 60)
%U 第幾週,從星期日開始 (00 - 53)
%W 第幾週,從星期一開始 (00 - 53)
%w 星期幾,星期日開始 (0 - 6)
%X 24時:分:秒
%x 月/日/年
%Y 西元年
%y 西元年後兩位
%Z 時區
%% %

參考

因為我準備的是 ruby 2.1 認證,所以以下連結都是 2.1 版的文件

Time Ruby document(core)
Time Ruby document(stdlib)
Date Ruby document(stdlib)
DateTime Ruby document(stdlib)

Comments

comments powered by Disqus