Project

General

Profile

Bug #5402 » 0001-enhancing-documentation-for-Time-extension-in-stdlib.patch

semmons99 (Shane Emmons), 10/04/2011 11:33 PM

View differences:

lib/time.rb
require 'date'
#
# == Introduction
# Extends the Time class with additional Class and Instance 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-01-01") #=> 2010-01-01 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-04"
# Time.parse("12:00") #=> 2011-10-04 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
#
# def initialize(mon, day, year)
# @mon, @day, @year = mon, day, year
# end
# end
#
# d = Date.parse("2010-01-01")
# t = Time.parse("2010-01-02")
# dt = DateTime.parse("2010-01-03")
# md = MyDate.new(1,4,2010)
#
# Time.parse("12:00" d) #=> 2010-01-01 12:00:00 -0500
# Time.parse("12:00" t) #=> 2010-01-02 12:00:00 -0500
# Time.parse("12:00" dt) #=> 2010-01-03 12:00:00 -0500
# Time.parse("12:00" md) #=> 2010-01-04 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-01-01") {|year| year + (year < 70 ? 2000 : 1900)}
# #=> 2001-01-01 00:00:00 -0500
# Time.parse("70-01-01") {|year| year + (year < 70 ? 2000 : 1900)}
# #=> 1970-01-01 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-01-01", "%Y-%m-%d") #=> 2000-01-01 00:00:00 -0500
#
# Implements the extensions to the Time class that are described in the
# documentation for the time.rb library.
# 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
#
class Time
class << Time
(1-1/2)