Ruby 日期 & 時間(Date & Time)

2021-02-20 開源方舟
Ruby 日期 & 時間(Date & Time)

Time 類在 Ruby 中用於表示日期和時間。它是基於作業系統提供的系統日期和時間之上。該類可能無法表示 1970 年之前或者 2038 年之後的日期。

本教程將讓您熟悉日期和時間的所有重要的概念。

創建當前的日期和時間

下面是獲取當前的日期和時間的簡單實例:

實例

#!/usr/bin/ruby -w
# -*- coding: UTF-8 -*-

time1 = Time.new

puts "當前時間 : " + time1.inspect

# Time.now 功能相同
time2 = Time.now
puts "當前時間 : " + time2.inspect


運行實例 »

這將產生以下結果:

Current Time : Mon Jun 02 12:02:39 -0700 2008
Current Time : Mon Jun 02 12:02:39 -0700 2008

獲取 Date & Time 組件

我們可以使用 Time 對象來獲取各種日期和時間的組件。請看下面的實例:

#!/usr/bin/ruby -w# -*- coding: UTF-8 -*-

time =Time.new# Time 的組件
puts "當前時間 : "+ time.inspect
puts time.year # => 日期的年份
puts time.month # => 日期的月份(1 到 12)
puts time.day # => 一個月中的第幾天(1 到 31)
puts time.wday # => 一周中的星期幾(0 是星期日)
puts time.yday # => 365:一年中的第幾天
puts time.hour # => 23:24 小時制
puts time.min # => 59
puts time.sec # => 59
puts time.usec # => 999999:微秒
puts time.zone # => "UTC":時區名稱

這將產生以下結果:

當前時間:2015-09-1715:24:44+080020159174260152444921519
CST

Time.utc、Time.gm 和 Time.local 函數

這些函數可用于格式化標準格式的日期,如下所示:

# July 8, 2008
Time.local(2008, 7, 8)
# July 8, 2008, 09:10am,本地時間
Time.local(2008, 7, 8, 9, 10)
# July 8, 2008, 09:10 UTC
Time.utc(2008, 7, 8, 9, 10)
# July 8, 2008, 09:10:11 GMT (與 UTC 相同)
Time.gm(2008, 7, 8, 9, 10, 11)

下面的實例在數組中獲取所有的組件:

[sec,min,hour,day,month,year,wday,yday,isdst,zone]

嘗試下面的實例:

#!/usr/bin/ruby -w

time =Time.new

values = time.to_a
p values

以上實例運行輸出結果為:

[39,25,15,17,9,2015,4,260,false,"CST"]

該數組可被傳到 Time.utc 或 Time.local 函數來獲取日期的不同格式,如下所示:

#!/usr/bin/ruby -w

time =Time.new

values = time.to_a
puts Time.utc(*values)

以上實例運行輸出結果為:

2015-09-1715:26:09 UTC

下面是獲取時間的方式,從紀元以來的秒數(平臺相關):

# 返回從紀元以來的秒數
time = Time.now.to_i

# 把秒數轉換為 Time 對象
Time.at(time)

# 返回從紀元以來的秒數,包含微妙
time = Time.now.to_f

時區和夏令時

您可以使用 Time 對象來獲取與時區和夏令時有關的所有信息,如下所示:

time = Time.new

# 這裡是解釋
time.zone # => "UTC":返回時區
time.utc_offset # => 0:UTC 是相對於 UTC 的 0 秒偏移
time.zone # => "PST"(或其他時區)
time.isdst # => false:如果 UTC 沒有 DST(夏令時)
time.utc? # => true:如果在 UTC 時區
time.localtime # 轉換為本地時區
time.gmtime # 轉換回 UTC
time.getlocal # 返回本地區中的一個新的 Time 對象
time.getutc # 返回 UTC 中的一個新的 Time 對象

格式化時間和日期

有多種方式格式化日期和時間。下面的實例演示了其中一部分:

#!/usr/bin/ruby -w
time =Time.new

puts time.to_s
puts time.ctime
puts time.localtime
puts time.strftime("%Y-%m-%d %H:%M:%S")

以上實例運行輸出結果為:

2015-09-1715:26:42+0800ThuSep1715:26:4220152015-09-1715:26:42+08002015-09-1715:26:42

時間格式化指令

下表所列出的指令與方法 Time.strftime 一起使用。

指令描述%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 或 PM)。%S分鐘中的第幾秒(00 或 60)。%U當前年中的周數,從第一個星期日(作為第一周的第一天)開始(00 到 53)。%W當前年中的周數,從第一個星期一(作為第一周的第一天)開始(00 到 53)。%w一星期中的第幾天(Sunday 是 0,0 到 6)。%x只有日期沒有時間的優先表示法。%X只有時間沒有日期的優先表示法。%y不帶世紀的年份表示(00 到 99)。%Y帶有世紀的年份。%Z時區名稱。%%% 字符。時間算法

您可以用時間做一些簡單的算術,如下所示:

now = Time.now # 當前時間
puts now

past = now - 10 # 10 秒之前。Time - number => Time
puts past

future = now + 10 # 從現在開始 10 秒之後。Time + number => Time
puts future

diff = future - now # => 10 Time - Time => 秒數
puts diff

這將產生以下結果:

Thu Aug 01 20:57:05 -0700 2013
Thu Aug 01 20:56:55 -0700 2013
Thu Aug 01 20:57:15 -0700 2013
10.0

相關焦點

  • 用date_time庫創建日期對象的方法,看完讓你收穫滿滿
    空的構造函數會創建一個值為 not_a_date_time 的無效日期;順序傳入年月日值則創建一個對應日期的date對象,例如:date d1;//一個無效的日期date d2(2010,1,1);//使用數字構造日期date d3(2000
  • Python基礎模塊:日期與時間模塊@time+datetime
    前段時間才哥主要在忙於工作和遊戲,以及準備肥家事宜(比如預約核酸)。終於,回家之後準備好好學習一下,從python基礎模塊開始,今天為大家準備的是python的日期與時間處理模塊time和datetime。
  • C++中,date_time庫使用date_period類來表示日期區間的概念
    date_time庫使用date_period類來表示日期區間的概念,它是時間軸上的一個左閉右開區間,端點是兩個date對象。區間的左邊界必須小於右邊界,否則date_period將表示一個無效的日期區間。
  • C++中,date_time庫示範日期迭代器的基本用法,都在這裡了
    date_time庫可以用簡單的遞增或者遞減操作符連續訪問日期,這些迭代器包括day_iterator、week_iterator、month_iterator和year_iterator,它們分別以天、周、月和年為單位增減。
  • 利用Python中的pandas(date_range)庫生成時間序列(time series)
    在講pandas時間序列函數之前,我大概介紹下什麼是時間序列(time series)。時間序列(time series)簡單的說就是各時間點上形成的數值序列,時間序列(time series)分析就是通過觀察歷史數據預測未來的值。比如股票預測、房價預測分析等。本篇文章主要詳細講解生成時間索引的函數date_range及延伸函數。
  • 在C++中,對ptime的操作,相當於對date和time_duration的操作
    由於ptime相當於date+time_duration,所以對它的操作可以分解為對這兩個組成部分的操作。ptime使用date()和time_of_day()兩個成員函數獲得時間點中的日期和時間長度,然後就可以分別處理。
  • Excel日期及時間函數——DATEVALUE函數
    DATEVALUE函數概念及語法DATEVALUE函數概念:將日期值從字符串轉化為序列數,表示日期時間代碼的日期;DATEVALUE 函數將存儲為文本的日期轉換為 Excel 識別為日期的序列號。 例如,公式=DATEVALUE("1/1/2008") 返回 39448,即日期 2008-1-1 的序列號。
  • Linux下日期時間date命令是如何使用的?
    前言在linux系統下,date命令被用來顯示或設定日期和時間。前面的文章我們介紹過,日誌是排查問題的重要組成部分,但在日誌的生成和查看中,與準確的時間是分不開的,如果時間不準確,查看起日誌來會變得很費勁。
  • 在C++中,date類訪問日期的操作方法,都在這裡了
    成員函數year()、month()和day()分別返回日期的年、月、日:date d(2017,6,1);assert(d. year()==2017);assert(d. month()==6);assert
  • 別用Date了,Java8新特性之日期處理,現在學會也不遲!
    同時繼承了Joda 庫按人類語言和計算機各自解析的時間處理方式。不同於老版本,新API基於ISO標準日曆系統,java.time包下的所有類都是不可變類型而且線程安全。關鍵類Instant:瞬時實例。LocalDate:本地日期,不包含具體時間 例如:2014-01-14 可以用來記錄生日、紀念日、加盟日等。
  • xk-time 1.1.0 發布,Java 時間工具包,增加模糊解析日期功能
    xk-time工具包,將上面功能按照時間轉換,時間計算,時間格式化解析分成3個工具類:DateTimeConverterUtil,DateTimeCalculatorUtil,DateTimeFormatterUtil,每個類只做一個種功能,方便使用。(3)為了將與時間緊密相關的節假日、農曆、二十四節氣、十二星座和日曆等功能集中起來開發成工具,方便使用。
  • 聽說你還在用SimpleDateFormat格式化日期
    ();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");Date stationTime = dateFormat.parse(dateFormat.format(svcWorkOrderPo.getPayEndTime()));orderDailyStatisticsPo.setStatisticalDate(stationTime
  • PHP時間戳和日期相互轉換操作
    時間戳轉換為日期時間戳轉換函數:date("Y-m-d H:i:s",time()),"Y-m-d H:i:s"是轉換後的日期格式,time()是獲得當前時間的時間戳。例如:date("Y-m-d H:i:s",time())日期轉換為時間戳class SaonekController extends Controller { public function indexAction() {  /*  時間戳轉換成日期不用說了  但是日期要轉成時間戳的話就要用到
  • Python 日期時間處理模塊學習筆記
    datetime模塊定義了下面這幾個類:date:表示日期的類。常用的屬性有year, month, day;time:表示時間的類。常用的屬性有hour, minute, second, microsecond;datetime:表示日期時間。
  • 關於SAP的日期和時間
    TTZD : Summer time rules (Daylight saving).     4. TTZDF : Summer time rules (fixed annual dates)    5. TTZDV : Summer time rules (variable dates)    日期時間相關的系統變量    1.
  • R語言 日期、時間和lubridate包
    函數strptime( )是string parse time的簡稱,返回POSIXlt日期(即以列表的形式存儲日期和時間),在解析時必須制定文本和日期對應的位置,日期的格式使用%+字母來指定。這樣兩個日期值就可以相減,而所得到的的結果就是兩個日期值相差的天數> startdate <- as.Date("2015-11-03")> enddate <- as.Date("2016-11-03")> #顯示兩個日期間隔的天數> days <- enddate - startdate> daysTime
  • 時間序列 | 字符串和日期的相互轉換
    在數據處理過程中,難免會遇到日期格式,特別是從外部讀取數據到jupyter或其他python編譯器中,用於數據處理分析時。若讀取excel文檔時還能保留原本日期時間格式,但有時卻差強人意,讀取後為字符串格式,尤其是以csv格式存儲的數據。此時就需要用到字符串轉日期格式。
  • 分享Excel中的21個時間和日期函數!
    語法:DAYS360(start_date,end_date,method)釋義:Start_date (起始日期) 和 end_date (結束日期) 為您想要知道天數之間的兩個日期。如果 start_date 發生在 end_date 之後,則 DAYS360 會傳回負數值。
  • 18 個示例帶你掌握 Java 8 日期時間處理!
    Java處理日期、日曆和時間的方式一直為社區所詬病,將 java.util.Date設定為可變類型,以及SimpleDateFormat的非線程安全使其應用非常受限。新API基於ISO標準日曆系統,java.time包下的所有類都是不可變類型而且線程安全。
  • anythingtodate帶你輕鬆處理日期
    我們常用date()函數來進行日期的處理,但小編近日發現了一個同樣非常好用的命令anythingtodate,它能讓我們在處理數據中的日期時多一種選擇,從而更加輕鬆,接下來讓我們一起來看一下該命令如何使用吧~命令anythingtodate可以將作為字符串或長數字輸入的日期變量轉換為Stata可識別的日期型變量,也可將Stata格式中識別為數字的日期更改為日期格式。