Ruby 提供了内置类,如 Time
、Date
和 DateTime
来处理日期和时间。
这些类允许您轻松创建、操作、格式化和解析日期和时间值。
注意:Time
类是 Ruby 核心库的一部分,无需额外文件即可使用。但是,Date
和 DateTime
是标准库的一部分,需要使用 'date'
才能使用。
示例 1:创建当前日期和时间
您可以使用 Time
类获取当前的系统时间。例如,
current_time = Time.now
puts current_time
输出
2025-05-30 05:42:32 +0000
在此,Time.now
方法返回一个对象,该对象表示当前日期和时间,根据您系统本地时区的系统时钟。
然后,您打印此对象以显示当前的本地日期和时间。
注意:输出中显示的时区可能因您的系统本地时区设置而异。如果您的系统时区是 UTC,您将看到 +0000
;否则,它将显示您的本地时区偏移量。
示例 2:获取当前日期
Ruby 有一个 Date
类用于处理日期(年、月、日)。
我们需要标准库 'date'
来使用它。例如,
require 'date'
current_date = Date.today
puts current_date
输出
2025-05-30
在此示例中,我们首先包含了 Ruby 的 date
库来访问 Date
类。然后,我们调用 Date.today
来获取当前日期并打印它。
注意:Date.today
返回您系统本地时间的日期。
Ruby 日期和时间类的属性和方法
您可以从 Date
、Time
和 DateTime
类中检索年、月、日、时、分和秒的组件。
最常用的类是
类 | 描述 |
---|---|
Date |
仅表示日期(年、月、日)。 |
Time |
表示日期和时间(到秒/毫秒)。 |
DateTime |
表示具有更多功能的日期和时间,包括小数秒和时区。 |
示例 3:提取日期组件
require 'date'
current_date = Date.today
puts "Year: #{current_date.year}"
puts "Month: #{current_date.month}"
puts "Day: #{current_date.day}"
输出
Year: 2025 Month: 5 Day: 30
在此示例中,我们创建了一个名为 current_date
的 Date
类对象。
然后,我们调用 Date
类的 year
、month
和 day
方法来提取单独的日期组件。
示例 4:创建特定的日期对象
您可以使用 Date
类提供的构造函数来指定特定日期。例如,
require 'date'
specific_date = Date.new(2022, 12, 25)
puts specific_date
输出
2022-12-25
Date.new
方法将年、月和日作为参数,并返回该日期的 Date
对象。
示例 5:创建 Time 对象
您可以创建 Time
的实例,该实例表示特定的日期和时间。例如,
time1 = Time.new(2022, 12, 25, 10, 30, 45)
puts time1
输出
2022-12-25 10:30:45 +0000
在这里,Time.new
使用指定的年、月、日、时、分和秒创建一个 Time
对象。
注意:如果您不指定时区,Time.new
将使用您系统的本地时区。
如果省略某些参数,Ruby 会将缺失的部分设置为默认值:小时、分钟和秒默认为 **0**(午夜),其他组件也会相应地默认为默认值。例如,
time2 = Time.new(2022, 12, 25)
puts time2
输出
2022-12-25 00:00:00 +0000
示例 6:获取当前时间组件
您可以从 Time
对象中检索小时、分钟和秒的组件。例如,
current_time = Time.now
puts "Hour: #{current_time.hour}"
puts "Minute: #{current_time.min}"
puts "Second: #{current_time.sec}"
输出
Hour: 6 Minute: 29 Second: 38
在这里,我们调用 current_time
对象上的 hour
、min
和 sec
方法来提取单独的时间组件。
Ruby DateTime 类
DateTime
类结合了日期和时间功能,支持小数秒,并且与 Time
相比,具有增强的时区支持。例如,
require 'date'
date_time = DateTime.new(2022, 12, 25, 10, 30, 45)
puts date_time
# You can also specify a timezone offset as the 7th argument
date_time_offset = DateTime.new(2022, 12, 25, 10, 30, 45, '+05:45')
puts date_time_offset
date_time_now = DateTime.now
puts date_time_now
输出
2022-12-25T10:30:45+00:00 2022-12-25T10:30:45+05:45 2025-05-30T05:42:32+00:00
DateTime.new
从指定的日期和时间组件构造 DateTime
对象。
默认情况下,时区为 UTC,除非使用偏移字符串(如 '+05:45'
)显式指定。
此外,DateTime.now
返回当前的日期和时间作为一个 DateTime
对象。
注意:Time
类通常更适合大多数日期和时间操作,因为它更高效,并且很好地支持系统时区和夏令时。
DateTime
类对于历史日期或手动处理偏移量很有用。
示例 7:日期算术
您可以对 Date
对象执行各种算术运算:添加或减去天数、查找日期之间的差异以及乘以或除以持续时间。
让我们看一个例子,
require 'date'
date1 = Date.new(2025, 5, 30)
date2 = Date.new(2025, 5, 20)
# Calculate difference in days (as an integer)
date_difference = (date1 - date2).to_i
puts "Difference in days: #{date_difference}"
输出
Difference in days: 10
示例 8:向日期添加天数
您也可以使用 +
运算符向 Date
对象添加天数。例如,
require 'date'
# Adding days to a date
current_date = Date.today
puts "Today: #{current_date}"
puts "In 7 days: #{current_date + 7}"
输出
Today: 2025-05-30 In 7 days: 2025-06-06
更多关于 Ruby 日期和时间
您可以使用 strftime
将日期和时间对象格式化为字符串。例如,
current_time = Time.now
puts current_time.strftime("%Y-%m-%d %H:%M:%S")
输出
2025-05-30 06:29:38
在此,代码获取当前时间,并使用 strftime
将其格式化为 YYYY-MM-DD HH:MM:SS
格式的字符串。
您可以使用 strptime
将字符串解析为 DateTime
对象。例如,
require 'date'
date_time = DateTime.strptime('25-12-2022 10:30:45', '%d-%m-%Y %H:%M:%S')
puts date_time
输出
2022-12-25T10:30:45+00:00
在此,strptime
根据给定的格式指令解析字符串,并返回一个 DateTime
对象。
您可以使用 Date.parse
和 Time.parse
轻松地将标准日期和时间字符串转换为 Ruby 对象。例如,
# Parsing with Date.parse and Time.parse
require 'date'
require 'time'
parsed_date = Date.parse("2025-05-30")
puts parsed_date # Output: 2025-05-30
parsed_time = Time.parse("2025-05-30 10:45:00")
puts parsed_time # Output: 2025-05-30 10:45:00 +0000
在这里,Date.parse
和 Time.parse
将字符串输入转换为日期/时间对象。