How to scale Date-Time properly in REBOL?
[1/4] from: jason:cunliffe:verizon at: 13-Jan-2002 9:00
Hi
I need robust date-time handling, for referencing a wide range of
timestamped data, historical, ancient, modern, up to and including current
internet messaging logfiles etc..
Ideally looking for REBOL implementation of the rich feature set offered by
Marc-André Lemburg's superb mxDateTime module for Python:
http://www.lemburg.com/files/python/
among the problems I have with REBOL's datetime:
>> n: now
== 13-Jan-2002/8:48-5:00
>> n/year
== 2002
>> n/year: 1400
== 1400
>> n
== 13-Jan-1400/8:48-5:00
>> n/year: -1400
== -1400
>> n
== 13-Jan-64136/8:48-5:00
oops!
Is this just a bug, or is there a real prbolem in REBOL adressing historical
data?
How to fix this?
Has anyone already written a more versatile datetime object which can
override the defaults?
Am I going to have to create my own date-time format and bypass rebols?
If so any suggestiosn about how best to do this.. create a new
datatype/protocol?
what do you suggest?
many thanks
./Jason
[2/4] from: brett:codeconscious at: 14-Jan-2002 19:26
Hi Jason,
> what do you suggest?
You're probably not going to like this :)
Ask [feedback--rebol--com].
*ducks*
Other than that I've include just a few miscellanous functions I've used
(not very often) just to feel like I contributed something of even small
use:
;
; Datetimes
;
subtract-datetimes: function [
"Subract one date from another returning time between them."
a [date!]
b [date!]
] [delta-days delta-hhmmss a-hhmmss b-hhmmss] [
delta-days: subtract a/date b/date
a-hhmmss: either a/time [a/time] [00:00:00]
b-hhmmss: either b/time [b/time] [00:00:00]
return add (multiply 24:00:00 delta-days) (subtract a-hhmmss b-hhmmss)
]
;
; Dates
;
add-months: function [
"Add months to a date."
date [date!]
months [integer!]
] [result-date delta-years delta-months] [
delta-years: to-integer divide months 12
delta-months: remainder months 12
if lesser? delta-months 0 [
delta-years: subtract delta-years 1
delta-months: add delta-months 12
]
result-date: date
result-date/year: add result-date/year delta-years
result-date/month: add result-date/month delta-months
return result-date
]
first-day?: func [
"First day of the month."
date "Specifies a month using an sample date." [date!]
][
to-date reduce[1 date/month date/year]
]
days-in-month?: func [
"Number of days in the month."
date "Specifies a month using an sample date." [date!]
][
subtract to-date reduce[1 date/month + 1 date/year] first-day? date
]
last-day: last-day?: func [
"Last day of the month."
date "Specifies a month using an sample date." [date!]
][
to-date reduce [ days-in-month? date date/month date/year]
]
Cheers,
Brett.
[3/4] from: rebol:optushome:au at: 14-Jan-2002 22:35
;
> ; Dates
> ;
<<quoted lines omitted: 14>>
> return result-date
> ]
Maybe I'm missing something there, Brett, but that looks like a bit of
overkill?
add-months: func [
"Add months to a date."
date [date!]
months [integer!]
][
date/month: date/month + months
date
]
Cheers,
Allen K
[4/4] from: brett::codeconscious::com at: 14-Jan-2002 23:43
Hi Allen,
> Maybe I'm missing something there, Brett, but that looks like a bit of
> overkill?
<<quoted lines omitted: 6>>
> date
> ]
Inappropriate overkill is a bad habit of mine :)
In this case I think it was due to bugs in date operations, similar to what
Jason has found.
It eludes me now which versions are affected.
Brett.
Notes
- Quoted lines have been omitted from some messages.
View the message alone to see the lines that have been omitted