Ruby Date & Time

Ruby provides built-in classes like Time, Date, and DateTime to work with dates and times.

These classes allow you to create, manipulate, format, and parse date and time values easily.

Note: The Time class is part of Ruby's core library and is available without requiring additional files. However, Date and DateTime are part of the standard library and require 'date' to be used.


Example 1: Create Current Date and Time

You can use the Time class to get the current system time. For example,

current_time = Time.now
puts current_time

Output

2025-05-30 05:42:32 +0000

Here, the Time.now method returns an object representing the current date and time according to the system clock in your system's local timezone.

You then print this object to display the current local date and time.

Note: The timezone shown in outputs may differ depending on your system's local timezone settings. If your system timezone is UTC, you'll see +0000; otherwise, it will show your local timezone offset.


Example 2: Get Current Date

Ruby has a Date class for handling dates (year, month, day).

We require the standard library 'date' to use it. For example,

require 'date'

current_date = Date.today
puts current_date

Output

2025-05-30

In this example, we first included Ruby's date library to access the Date class. Then, we called Date.today to get the current date and print it.

Note: Date.today returns the date according to your system's local time.


Attributes and Methods of Ruby Date & Time Classes

You can retrieve year, month, day, hour, minute, and second components from Date, Time, and DateTime classes.

The most commonly used classes are:

Class Description
Date Represents only date (year, month, day).
Time Represents date and time to the second/millisecond.
DateTime Represents date and time with more features, including fractional seconds and timezone.

Example 3: Extract Date Components

require 'date'

current_date = Date.today

puts "Year: #{current_date.year}"
puts "Month: #{current_date.month}"
puts "Day: #{current_date.day}"

Output

Year: 2025
Month: 5
Day: 30

In this example, we created an object of the Date class named current_date.

Then, we called the year, month, and day methods of the Date class to extract the individual date components.


Example 4: Create a Specific Date Object

You can specify a particular date using the constructor provided by the Date class. For example,

require 'date'

specific_date = Date.new(2022, 12, 25)
puts specific_date

Output

2022-12-25

The Date.new method takes year, month, and day as arguments and returns a Date object for that date.


Example 5: Create a Time Object

You can create an instance of Time that represents a specific date and time. For example,

time1 = Time.new(2022, 12, 25, 10, 30, 45)
puts time1

Output

2022-12-25 10:30:45 +0000

Here, Time.new creates a Time object with the specified year, month, day, hour, minute, and seconds.

Note: If you don't specify a timezone, Time.new uses your system's local timezone.

If some arguments are omitted, Ruby sets the missing parts to default values: hours, minutes, and seconds default to 0 (midnight), and other components default accordingly. For example,

time2 = Time.new(2022, 12, 25)
puts time2

Output

2022-12-25 00:00:00 +0000

Example 6: Get Current Time Components

You can retrieve the hour, minute, and second components from a Time object. For example,

current_time = Time.now

puts "Hour: #{current_time.hour}"
puts "Minute: #{current_time.min}"
puts "Second: #{current_time.sec}"

Output

Hour: 6
Minute: 29
Second: 38

Here, we call the hour, min, and sec methods on the current_time object to extract individual time components.


Ruby DateTime Class

The DateTime class combines date and time functionality, supports fractional seconds, and has enhanced timezone support compared to Time. For example,

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

Output

2022-12-25T10:30:45+00:00  
2022-12-25T10:30:45+05:45  
2025-05-30T05:42:32+00:00

DateTime.new constructs a DateTime object from the specified date and time components.

By default, the timezone is UTC unless specified explicitly using an offset string (like '+05:45').

Also, DateTime.now returns the current date and time as a DateTime object.

Note: The Time class is usually preferred for most date and time operations as it is more efficient and supports system timezones and daylight saving well.

The DateTime class is useful for historical dates or when manually handling offsets.


Example 7: Date Arithmetic

You can perform various arithmetic operations with Date objects: add or subtract days, find the difference between dates, and multiply or divide durations.

Let's see an example,

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}"

Output

Difference in days: 10

Example 8: Adding Days to a Date

You can also add days to a Date object using the + operator. For example,

require 'date'

# Adding days to a date
current_date = Date.today

puts "Today: #{current_date}"
puts "In 7 days: #{current_date + 7}"

Output

Today: 2025-05-30
In 7 days: 2025-06-06

More on Ruby Date & Time

Formatting Dates and Times with strftime

You can format date and time objects into strings using strftime. For example,

current_time = Time.now
puts current_time.strftime("%Y-%m-%d %H:%M:%S")

Output

2025-05-30 06:29:38

Here, the code gets the current time and formats it as a string in the YYYY-MM-DD HH:MM:SS format using strftime.

Parsing Date Strings with strptime

You can parse a string into a DateTime object using strptime. For example,

require 'date'

date_time = DateTime.strptime('25-12-2022 10:30:45', '%d-%m-%Y %H:%M:%S')
puts date_time

Output

2022-12-25T10:30:45+00:00

Here, strptime parses a string according to the given format directives and returns a DateTime object.

Time.parse and Date.parse

You can easily convert standard date and time strings into Ruby objects using Date.parse and Time.parse. For example,

# 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

Here, Date.parse and Time.parse convert string input into date/time objects.

Did you find this article helpful?

Our premium learning platform, created with over a decade of experience and thousands of feedbacks.

Learn and improve your coding skills like never before.

Try Programiz PRO
  • Interactive Courses
  • Certificates
  • AI Help
  • 2000+ Challenges