Ruby 日期和时间

Ruby 提供了内置类,如 TimeDateDateTime 来处理日期和时间。

这些类允许您轻松创建、操作、格式化和解析日期和时间值。

注意Time 类是 Ruby 核心库的一部分,无需额外文件即可使用。但是,DateDateTime 是标准库的一部分,需要使用 '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 日期和时间类的属性和方法

您可以从 DateTimeDateTime 类中检索年、月、日、时、分和秒的组件。

最常用的类是

描述
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_dateDate 类对象。

然后,我们调用 Date 类的 yearmonthday 方法来提取单独的日期组件。


示例 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 对象上的 hourminsec 方法来提取单独的时间组件。


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 格式化日期和时间

您可以使用 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 解析日期字符串

您可以使用 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 对象。

Time.parse 和 Date.parse

您可以使用 Date.parseTime.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.parseTime.parse 将字符串输入转换为日期/时间对象。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战