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

raw_date
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}"
  1. 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
  1. 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
  1. 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