第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Ruby 的時(shí)間類

在本章中,您將學(xué)習(xí)到 Ruby 操縱時(shí)間的類,如何將字符串轉(zhuǎn)換為時(shí)間對(duì)象如何將字符串轉(zhuǎn)換為時(shí)間對(duì)象,如何將時(shí)間分解成部分(天/小時(shí)/毫秒…),格式化時(shí)間,時(shí)間對(duì)象之間的差值。

1. Time 類

您可以在 Ruby 中使用 Time 類來表示時(shí)間和日期,日期包括年、月、日,時(shí)間包括:時(shí)、分、秒。

該信息由 Time 類存儲(chǔ)為距大紀(jì)元以來的秒數(shù),也稱為 Unix時(shí)間。

1.1 實(shí)例化 Time 時(shí)間對(duì)象

您可以使用以下三種方式來實(shí)例化Time類。

  • 使用now方法獲取此刻的時(shí)間對(duì)象;
  • 您可以調(diào)用at方法使用Unix時(shí)間戳創(chuàng)建一個(gè)時(shí)間對(duì)象;
  • 您可以將開始日期以數(shù)字形式提供給Time.new(年/月/日)。

實(shí)例:

Time.now
# 2020-04-09 23:23:52 +0800
Time.new(2021, 1, 1)
# 2021-01-01 00:00:00 +0800
Time.at(15000000000)
# 2445-05-01 10:40:00 +0800

1.2 獲取基本屬性

您可以獲取時(shí)間對(duì)象、年月日、時(shí)分秒:

實(shí)例:

t = Time.now
puts t.day
puts t.month
puts t.hour

# ---- 輸出結(jié)果 ----
9
4
23

1.3 判斷日期的星期

您還可以獲取當(dāng)前是否是星期幾:

實(shí)例:

t = Time.now
puts t.monday?
puts t.friday?
puts t.thursday?

# ---- 輸出結(jié)果 ----
false
false
true

1.4 獲取時(shí)區(qū)

使用 zone 方法獲取時(shí)區(qū):

實(shí)例:

t = Time.now
t.zone

# ---- 輸出結(jié)果 ----
"CST"

如果需要時(shí)區(qū)偏移,可以使用 utc_offset 方法。此方法的輸出以秒為單位,但您可以除以3600,以小時(shí)為單位。

實(shí)例:

t = Time.now
t.utc_offset / 3600

# ---- 輸出結(jié)果 ----
8

您還可以使用 utc 獲取當(dāng)前時(shí)間:

實(shí)例:

t = Time.now
t.utc

# ---- 輸出結(jié)果 ----
2020-04-09 15:34:49 UTC

1.5 時(shí)間格式化

我們使用 strftime 來格式化時(shí)間。

實(shí)例:

time = Time.new
time.strftime("%d/%m/%Y")        # "10/04/2020"
time.strftime("%k:%M")           # "0:00"
time.strftime("%I:%M %p")        # "12:00 AM"
time.strftime("Today is %A")     # "Today is Friday"
time.strftime("%d of %B, %Y")    # "10 of April, 2020"
time.strftime("Unix time is %s") # "Unix time is 1586448049"

如您所見,此方法非常靈活。您可以獲取不帶日期的時(shí)間,也可以獲取格式正確的日期以及當(dāng)前月份的年,日和名稱。

方法 時(shí)機(jī)簡(jiǎn)介(調(diào)用的時(shí)機(jī))
%d 每月的某天(01…31)
%m 一年中的月份(01…12)將%-m用于(1…12)
%k 小時(shí)(0…23)
%M 分鐘
%S 秒(00…60)
%I 小時(shí) (1…12)
%p AM/PM
%Y
%A 星期幾(名稱)
%B 月(名稱)

1.6 生成時(shí)間戳

使用to_i獲取時(shí)間戳(以UTC(世界標(biāo)準(zhǔn)時(shí)間)為單位的秒數(shù))。

實(shí)例:

Time.now.to_i
# 1586448495

1.7 時(shí)差

有時(shí)您希望獲取將來或過去的時(shí)間。您可以對(duì)時(shí)間對(duì)象進(jìn)行加減法。時(shí)間的內(nèi)部表示以秒為單位,因此您可以執(zhí)行以下操作:

time = Time.new + 10

您可以通過比較來判斷時(shí)間先后。

Time.new > time

如果想獲取明天的時(shí)間

# seconds * minutes * hours
60 * 60 * 24 # 86400
Time.now + 86400

# ---- 輸出結(jié)果 ----
2020-04-11 00:18:57 +0800

2. Date 類

Date類沒有分鐘,秒或小時(shí)的概念。此類以天為單位在內(nèi)部存儲(chǔ)所有內(nèi)容。

注意事項(xiàng):DateDateClass類位于Rubydate庫(kù)中。在使用這些類及其各自的方法之前,必須使用require指令它。

require 'date'

2.1 實(shí)例化 Date 類

我們可以使用 today 類方法來獲取當(dāng)天的時(shí)間:

Date.today

# ---- 輸出結(jié)果 ----
#<Date: 2020-04-10 ((2458950j,0s,0n),+0s,2299161j)>

我們還可以通過new方法創(chuàng)建一個(gè)指定某一天的時(shí)間對(duì)象。

實(shí)例:

require 'date'

date = Date.new(2020, 4, 1)
=> #<Date: 4909645/2,0,2299161>

2.2 獲取基本屬性

實(shí)例化 Date 對(duì)象后,我們可以通過 day、month、year實(shí)例方法訪問它的屬性:

實(shí)例:

date.day
=> 1

date.month
=> 4

date.year
=> 2020

2.3 解析字符串成為日期

Date.parse方法將嘗試解析任何看起來像日期的字符串:

實(shí)例:

Date.parse("10/10/2020")

# ---- 輸出結(jié)果 ----
#<Date: 2020-10-10 ((2459133j,0s,0n),+0s,2299161j)>

**注意事項(xiàng):**不準(zhǔn)確的字符串會(huì)錯(cuò)誤解析時(shí)間。

可以使用Date.iso8601方法。使用這個(gè)方法的時(shí)候,我們需要使用像year-month-day這種格式的字符串。

實(shí)例:

Date.iso8601("2019-10-01")

# ---- 輸出結(jié)果 ----
#<Date: 2019-10-01 ((2458758j,0s,0n),+0s,2299161j)>

您可以使用Date.strptime方法和一組格式說明符來提供自己的自定義輸入格式。這些是可用于strftime的說明符。

實(shí)例:

Date.strptime("3 of September", "%d of %B") # 2020-09-03

# ---- 輸出結(jié)果 ----
#<Date: 2020-09-03 ((2459096j,0s,0n),+0s,2299161j)>

另外我們也可以使用Time來將字符串轉(zhuǎn)換成時(shí)間對(duì)象。

實(shí)例:

require 'time'
Time.parse("September 20 18:00")

# ---- 輸出結(jié)果 ----
2020-09-20 18:00:00 +0800

我們也可以使用strptime方法。

實(shí)例:

require 'time'
Time.strptime("1 of December 2017", "%d of %B %Y")

# ---- 輸出結(jié)果 ----
2017-12-01 00:00:00 +0800

TipsDateTime創(chuàng)建的實(shí)例唯一的區(qū)別為對(duì)象的類型。

3. DateTime 類

DateTime 類是 Date 的子類,它可以存儲(chǔ)除日期以外的秒數(shù)。

實(shí)例:

require 'date'

DateTime.superclass
# Date

datetime = DateTime.new(2020, 4, 1, 12, 30, 20, '+08:00')
#<DateTime: 2020-04-01T12:30:20+08:00 ((2458941j,16220s,0n),+28800s,2299161j)>

我們可以通過year、monthday、hour、minutesecondzone來訪問它的屬性。

datetime.year    # 2020
datetime.month   # 4
datetime.day     # 1
datetime.hour    # 12
datetime.minute  # 30
datetime.second  # 20
datetime.zone    # +08:00

我們還可以通過調(diào)用類方法now獲取當(dāng)前的時(shí)間。

now = DateTime.now

TipsTimeDateTime都可以完成相同的工作,主要區(qū)別是Time是用C實(shí)現(xiàn)的,因此速度會(huì)更快。

Comparison:
            Time:  2644596.6 i/s
        DateTime:   231634.8 i/s - 11.42x  slower

4. Date 常量

> Date::MONTHNAMES # (index 0 = nil)
=> [nil, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]

> Date::DAYNAMES.rotate(1)
=> ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

解釋:

月份從索引 1 開始,因此您可以獲得直接的月份編號(hào)->月份名稱映射。

日期從星期日開始,但是您可以使用rotate方法將星期從星期一開始。

5. 小結(jié)

我們?cè)诒菊轮袑W(xué)習(xí)了創(chuàng)建日期的 Date類,創(chuàng)建帶有時(shí)間日期的 TimeDateTime 類 ,并如何實(shí)例化它們,還學(xué)習(xí)了它們的一些常用屬性、獲取時(shí)區(qū)、判斷星期幾、格式化、時(shí)間戳。以及使用DateTime 來將字符串轉(zhuǎn)換成時(shí)間對(duì)象。最后又了解了 2 個(gè)常用的 Date 常量。