Maintenance Ruby 3.4 gets fixes, but no new features. Switch to Ruby 4.0 →
Time.strptime
# File tmp/rubies/ruby-3.4.1/lib/time.rb, line 459
def strptime(date, format, now=self.now)
d = Date._strptime(date, format)
raise ArgumentError, "invalid date or strptime format - '#{date}' '#{format}'" unless d
if seconds = d[:seconds]
if sec_fraction = d[:sec_fraction]
usec = sec_fraction * 1000000
usec *= -1 if seconds < 0
else
usec = 0
end
t = Time.at(seconds, usec)
if zone = d[:zone]
force_zone!(t, zone)
end
else
year = d[:year]
year = yield(year) if year && block_given?
yday = d[:yday]
if (d[:cwyear] && !year) || ((d[:cwday] || d[:cweek]) && !(d[:mon] && d[:mday]))
# make_time doesn't deal with cwyear/cwday/cweek
return Date.strptime(date, format).to_time
end
if (d[:wnum0] || d[:wnum1]) && !yday && !(d[:mon] && d[:mday])
yday = Date.strptime(date, format).yday
end
t = make_time(date, year, yday, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now)
end
t
end
Works similar to parse except that instead of using a heuristic to detect the format of the input string, you provide a second argument that describes the format of the string.
Raises ArgumentError if the date or format is invalid.
If a block is given, the year described in date is converted by the block. For example:
Time.strptime(...) {|y| y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}
Below is a list of the formatting options:
- %a
-
The abbreviated weekday name (“Sun”)
- %A
-
The full weekday name (“Sunday”)
- %b
-
The abbreviated month name (“Jan”)
- %B
-
The full month name (“January”)
- %c
-
The preferred local date and time representation
- %C
-
Century (20 in 2009)
- %d
-
Day of the month (01..31)
- %D
-
Date (%m/%d/%y)
- %e
-
Day of the month, blank-padded ( 1..31)
- %F
-
Equivalent to %Y-%m-%d (the ISO 8601 date format)
- %g
-
The last two digits of the commercial year
- %G
-
The week-based year according to ISO-8601 (week 1 starts on Monday and includes January 4)
- %h
-
Equivalent to %b
- %H
-
Hour of the day, 24-hour clock (00..23)
- %I
-
Hour of the day, 12-hour clock (01..12)
- %j
-
Day of the year (001..366)
- %k
-
hour, 24-hour clock, blank-padded ( 0..23)
- %l
-
hour, 12-hour clock, blank-padded ( 0..12)
- %L
-
Millisecond of the second (000..999)
- %m
-
Month of the year (01..12)
- %M
-
Minute of the hour (00..59)
- %n
-
Newline (\n)
- %N
-
Fractional seconds digits
- %p
-
Meridian indicator (“AM” or “PM”)
- %P
-
Meridian indicator (“am” or “pm”)
- %r
-
time, 12-hour (same as %I:%M:%S %p)
- %R
-
time, 24-hour (%H:%M)
- %s
-
Number of seconds since 1970-01-01 00:00:00 UTC.
- %S
-
Second of the minute (00..60)
- %t
-
Tab character (\t)
- %T
-
time, 24-hour (%H:%M:%S)
- %u
-
Day of the week as a decimal, Monday being 1. (1..7)
- %U
-
Week number of the current year, starting with the first Sunday as the first day of the first week (00..53)
- %v
-
VMS date (%e-%b-%Y)
- %V
-
Week number of year according to ISO 8601 (01..53)
- %W
-
Week number of the current year, starting with the first Monday as the first day of the first week (00..53)
- %w
-
Day of the week (Sunday is 0, 0..6)
- %x
-
Preferred representation for the date alone, no time
- %X
-
Preferred representation for the time alone, no date
- %y
-
Year without a century (00..99)
- %Y
-
Year which may include century, if provided
- %z
-
Time zone as hour offset from UTC (e.g. +0900)
- %Z
-
Time zone name
- %%
-
Literal “%” character
- %+
-
date(1) (%a %b %e %H:%M:%S %Z %Y)
require 'time' Time.strptime("2000-10-31", "%Y-%m-%d") #=> 2000-10-31 00:00:00 -0500
You must require ‘time’ to use this method.