Bug #5402 » 0001-enhancing-documentation-for-Time-extension-in-stdlib.patch
lib/time.rb | ||
---|---|---|
require 'date'
|
||
#
|
||
# == Introduction
|
||
# When 'time' is required, Time is extended with additional methods for parsing
|
||
# and converting Times.
|
||
#
|
||
# = Features
|
||
#
|
||
# This library extends the Time class with the following:
|
||
#
|
||
# This library extends the Time class:
|
||
# * conversion between date string and time object.
|
||
# * date-time defined by RFC 2822
|
||
# * HTTP-date defined by RFC 2616
|
||
# * dateTime defined by XML Schema Part 2: Datatypes (ISO 8601)
|
||
# * various formats handled by Date._parse (string to time only)
|
||
# * datetime defined by XML Schema Part 2: Datatypes (ISO 8601)
|
||
# * various formats handled by Date._parse
|
||
# * various formats handled by Date._strptime
|
||
#
|
||
# == Design Issues
|
||
# = Examples
|
||
#
|
||
# === Specialized interface
|
||
# All examples assume you have loaded Time with:
|
||
#
|
||
# This library provides methods dedicated to special purposes:
|
||
# * RFC 2822, RFC 2616 and XML Schema.
|
||
# * They makes usual life easier.
|
||
# require 'time'
|
||
#
|
||
# === Doesn't depend on strftime
|
||
# All of these examples were done using the EST timezone which is GMT-5.
|
||
#
|
||
# This library doesn't use +Time#strftime+. Especially #rfc2822 doesn't depend
|
||
# on +strftime+ because:
|
||
# == Creating a new Time instance
|
||
#
|
||
# * %a and %b are locale sensitive
|
||
# The easiest way to create a new time object is to use either #parse or
|
||
# #strptime. Each uses Date.__parse and Date.__strptime to create a new
|
||
# instance of Time.
|
||
#
|
||
# Since they are locale sensitive, they may be replaced to
|
||
# invalid weekday/month name in some locales.
|
||
# Since ruby-1.6 doesn't invoke setlocale by default,
|
||
# the problem doesn't arise until some external library invokes setlocale.
|
||
# Ruby/GTK is the example of such library.
|
||
# === Time.parse
|
||
#
|
||
# * %z is not portable
|
||
# #parse takes a string representation of a Time and attempts to parse it
|
||
# using a heuristic.
|
||
#
|
||
# %z is required to generate zone in date-time of RFC 2822
|
||
# but it is not portable.
|
||
# Date.parse("2010-10-31") #=> 2010-10-31 00:00:00 -0500
|
||
#
|
||
# Note that +Time#strftime+ doesn't use +strftime()+ function in libc since Ruby 1.9.
|
||
# This means +Time#strftime+ is locale-insensitive since Ruby 1.9.
|
||
# The above statements are not valid now.
|
||
# Any missing pieces of the date are inferred based on the current date.
|
||
#
|
||
require 'date'
|
||
# # assuming the current date is "2011-10-31"
|
||
# Time.parse("12:00") #=> 2011-10-31 12:00:00 -0500
|
||
#
|
||
# We can change the date used to infer our missing elements by passing a second
|
||
# object that responds to #mon, #day and #year, such as Date, Time or DateTime.
|
||
# We can also use our own object.
|
||
#
|
||
# class MyDate
|
||
# attr_reader :mon, :day, :year
|
||
#
|
||
# Implements the extensions to the Time class that are described in the
|
||
# documentation for the time.rb library.
|
||
# def initialize(mon, day, year)
|
||
# @mon, @day, @year = mon, day, year
|
||
# end
|
||
# end
|
||
#
|
||
# d = Date.parse("2010-10-28")
|
||
# t = Time.parse("2010-10-29")
|
||
# dt = DateTime.parse("2010-10-30")
|
||
# md = MyDate.new(10,31,2010)
|
||
#
|
||
# Time.parse("12:00" d) #=> 2010-10-28 12:00:00 -0500
|
||
# Time.parse("12:00" t) #=> 2010-10-29 12:00:00 -0500
|
||
# Time.parse("12:00" dt) #=> 2010-10-30 12:00:00 -0500
|
||
# Time.parse("12:00" md) #=> 2010-10-31 12:00:00 -0500
|
||
#
|
||
# #parse also accepts an optional block. You can use this block to specify how
|
||
# to handle the year component of the date. This is specifically designed for
|
||
# handling two digit years. For example, if you wanted to treat all two digit
|
||
# years prior to 70 as the year 2000+ you could write this:
|
||
#
|
||
# Time.parse("01-10-31") {|year| year + (year < 70 ? 2000 : 1900)}
|
||
# #=> 2001-10-31 00:00:00 -0500
|
||
# Time.parse("70-10-31") {|year| year + (year < 70 ? 2000 : 1900)}
|
||
# #=> 1970-10-31 00:00:00 -0500
|
||
#
|
||
# === Time.strptime
|
||
#
|
||
# #strptime 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
|
||
# is describes the format of the string. For example:
|
||
#
|
||
# Time.strptime("2000-10-31", "%Y-%m-%d") #=> 2000-10-31 00:00:00 -0500
|
||
#
|
||
class Time
|
||
class << Time
|
||
... | ... | |
# block. For example:
|
||
#
|
||
# Time.strptime(...) {|y| y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}
|
||
#
|
||
# Below is a list of the formating 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)
|
||
# %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, default is 9 digits (nanosecond)
|
||
# %3N millisecond (3 digits)
|
||
# %6N microsecond (6 digits)
|
||
# %9N nanosecond (9 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 with century
|
||
# %z :: Time zone as hour offset from UTC (e.g. +0900)
|
||
# %Z :: Time zone name
|
||
# %% :: Literal ``%'' character
|
||
def strptime(date, format, now=self.now)
|
||
d = Date._strptime(date, format)
|
||
raise ArgumentError, "invalid strptime format - `#{format}'" unless d
|
- « Previous
- 1
- 2
- Next »