View in color | License | Download script | History | Other scripts by: peterwood |
30-Apr 14:58 UTC
[0.057] 13.294k
[0.057] 13.294k
to-fussy-idate.rREBOL[
Title: "to-fussy-idate"
Version: 1.0.1
Date: 17-01-2005
Author: "Peter WA Wood"
Copyright: "Peter WA Wood"
File: %to-fussy-idate.r
Purpose: {A function which converts a Rebol date! to a string formatted
according to a strict interpretation of the RFC 822 standard.
If the time is not provided, a default of 00:00 is used.
If the seconds are not set, 00 is used.
(NB The zone defaults to 00:00 in a Rebol date)
Based on the original to-idate of Rebol/core and comments on the
Rebol mailing list.}
Usage: { example: to-fussy-idate rebol-date }
Library: [
level: 'beginner
type: 'function
domain: [web ]
platform: 'all
tested-under: [ core 2.5.6.2.4 "Mac OS X 10.2.8"
core 2.5.6.3.1 "Windows XP Professional"
view 1.2.10.3.1 "Windows XP Professional"
]
support: none
license: cc-by
{see http://www.rebol.org/cgi-bin/cgiwrap/rebol/license-help.r}
]
]
to-fussy-idate: func [
{converts a date! to a string formatted according to a strict
interpretation of the RFC 822 standard.
If the time is not set on the input date, a default of 00:00 is used.
If the seconds of the time is not set, 00 is used.
Warning: if the year supplied is four digits, Rebol correctly allocates
the weekday taking into account the century. This may cause validation
problems if the date is before the late 20th century or after the early
21st century.
}
the-date [date!]
"The date to be reformatted"
/local
fussy
"The string to be returned"
][
;; Build the output string from back forwards
fussy: copy " UT" ; Always use UT (GMT) for time
; zone offset
either the-date/time [
; the date has a time
insert fussy the-date/zone/minute
if the-date/zone/minute < 10 [insert fussy "0"]
insert fussy absolute the-date/zone/hour
if 10 > absolute the-date/zone/hour [insert fussy "0"]
either the-date/zone/hour < 0
[insert fussy " -"]
[insert fussy " +"]
if the-date/time/second = 0 ; Rebol only returns hh:mm if
[insert fussy ":00"] ; seconds is zero
insert fussy rejoin [the-date/time]
either the-date/time/hour < 10 ; Rebol doesn't return leading
[insert fussy " 0"] ; zero on hour
[insert fussy " "]
][
fussy: " 00:00:00 +0000 UT" ; the date has no time
]
insert fussy remainder the-date/year 100 ; last 2 digits of the year
either 10 > remainder the-date/year 100
[insert fussy " 0"]
[insert fussy " "]
insert fussy rejoin [
" "
pick [
"Jan" "Feb" "Mar" "Apr" "May" "Jun"
"Jul" "Aug" "Sep" "Oct" "Nov" "Dec"] the-date/month
]
insert fussy the-date/day
either the-date/day < 10
[insert fussy ", 0"]
[insert fussy ", " ]
insert fussy pick ["Mon" "Tue" "Wed" "Thu"
"Fri" "Sat" "Sun"] the-date/weekday
return head fussy
] ; end to-fussy-idate
;; History
;;
;; 1.0.0 17-Jan-2005 Initial release (no optimisation)
;; 1.0.1 18-Apr-2005 Tested under View 1.2.10.3.1 Windows XP
;; |