Dates, Time, and Formatting
Parsing Dates
Date.strptime parses text when the format is known.
date parsing
Parsing with an explicit format avoids guessing how the input string is arranged.
Parsing Dates
parsing_dates.rb
Replay: real traced execution (multi-file project)
require "date"
raw_date = "2025-05-28"
date = Date.strptime(raw_date, "%Y-%m-%d")
month = date.month
day = date.day
iso = date.iso8601
puts "raw=#{raw_date}"
puts "iso=#{iso}"
puts "month=#{month}"
puts "day=#{day}"
require "date"
raw_date = "2024-02-29"
date = Date.strptime(raw_date, "%Y-%m-%d")
month = date.month
day = date.day
iso = date.iso8601
puts "raw=#{raw_date}"
puts "iso=#{iso}"
puts "month=#{month}"
puts "day=#{day}"
require "date"
raw_date = "2025-12-31"
date = Date.strptime(raw_date, "%Y-%m-%d")
month = date.month
day = date.day
iso = date.iso8601
puts "raw=#{raw_date}"
puts "iso=#{iso}"
puts "month=#{month}"
puts "day=#{day}"
raw_date ← 2025-05-28, date ← 2025-05-28, month ← 5, day ← 28
1require "date"23raw_date→ 2025-05-28 = "2025-05-28" #@raw_date="2024-02-29", "2025-12-31"4date→ 2025-05-28 = Date.strptime(raw_date, "%Y-%m-%d")2025-05-2856month→ 5 = date.month57day→ 28 = date.day288iso→ 2025-05-28 = date.iso86012025-05-28910puts "raw=#{raw_date2025-05-28}"11puts "iso=#{iso2025-05-28}"12puts "month=#{month5}"13puts "day=#{day28}"outputraw=2025-05-28 iso=2025-05-28 month=5 day=28
raw_date ← 2024-02-29, date ← 2024-02-29, month ← 2, day ← 29
1require "date"23raw_date→ 2024-02-29 = "2024-02-29"4date→ 2024-02-29 = Date.strptime(raw_date, "%Y-%m-%d")2024-02-2956month→ 2 = date.month27day→ 29 = date.day298iso→ 2024-02-29 = date.iso86012024-02-29910puts "raw=#{raw_date2024-02-29}"11puts "iso=#{iso2024-02-29}"12puts "month=#{month2}"13puts "day=#{day29}"outputraw=2024-02-29 iso=2024-02-29 month=2 day=29
raw_date ← 2025-12-31, date ← 2025-12-31, month ← 12, day ← 31
1require "date"23raw_date→ 2025-12-31 = "2025-12-31"4date→ 2025-12-31 = Date.strptime(raw_date, "%Y-%m-%d")2025-12-3156month→ 12 = date.month127day→ 31 = date.day318iso→ 2025-12-31 = date.iso86012025-12-31910puts "raw=#{raw_date2025-12-31}"11puts "iso=#{iso2025-12-31}"12puts "month=#{month12}"13puts "day=#{day31}"outputraw=2025-12-31 iso=2025-12-31 month=12 day=31