[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Time: safe way to go to next day?

Emmanuel Touzery

10/21/2003 6:17:00 AM

Hello,

When i have a Time object, to get to next day i do: myTime += (60*60*24)
Not very elegant, but it works and I didn't find a nicer way.
well, i thought it worked...

now we are going to change the time in europe...
So it breaks my assumption...

any proper way to fix it?

emmanuel

irb(main):008:0> now = Time.now
Tue Oct 21 08:14:44 Central Europe Daylight Time 2003
irb(main):009:0> todayMidnight = Time.local(now.year, now.month,
now.day, 0,0,0)
Tue Oct 21 00:00:00 Central Europe Daylight Time 2003 # today at 0:00

irb(main):010:0> todayMidnight + (60*60*24)
Wed Oct 22 00:00:00 Central Europe Daylight Time 2003 # tomorrow at 0:00

[..]

irb(main):014:0> todayMidnight + (60*60*24)*5
Sun Oct 26 00:00:00 Central Europe Daylight Time 2003 # sun at 0:00
irb(main):015:0> todayMidnight + (60*60*24)*6
Sun Oct 26 23:00:00 Central Europe Standard Time 2003 # <----------
!!!! sun at 23:00



6 Answers

nobu.nokada

10/21/2003 7:13:00 AM

0

Hi,

At Tue, 21 Oct 2003 15:16:44 +0900,
Emmanuel Touzery wrote:
> When i have a Time object, to get to next day i do: myTime += (60*60*24)
> Not very elegant, but it works and I didn't find a nicer way.
> well, i thought it worked...
>
> now we are going to change the time in europe...
> So it breaks my assumption...

If you just want dates, what about date.rb?

require 'date'
today = Date.today
today.to_s # => "2003-10-21"
(today+5).to_s # => "2003-10-26"

I've not tested it with DST though.

--
Nobu Nakada

Emmanuel Touzery

10/21/2003 7:20:00 AM

0

Hello,

nobu.nokada@softhome.net wrote:

>If you just want dates, what about date.rb?
>
> require 'date'
> today = Date.today
> today.to_s # => "2003-10-21"
> (today+5).to_s # => "2003-10-26"
>
>I've not tested it with DST though.
>
>
>
but where is all this stuff documented?
find.rb, base64.rb, date.rb, the other day someone wanted to remove
recursively a dir, and was given another one of those magic files...
which doc did i miss? :O(

otherwise, yes it's probably what i want. unfortunately i now sit on a
lot of code to convert :O(
if someone has a way with Time, it would simplify things for me...

thanks,

emmanuel



Dalibor Sramek

10/21/2003 7:47:00 AM

0

Quoting Emmanuel Touzery <emmanuel.touzery@wanadoo.fr>:
> otherwise, yes it's probably what i want. unfortunately i now sit on a
> lot of code to convert :O(
> if someone has a way with Time, it would simplify things for me...

If you need just the date part you may probably ignore timezone as well. Use
UTC:
irb(main):027:0> ary = Time.now
=> Tue Oct 21 09:45:14 Central Europe Daylight Time 2003
irb(main):028:0> t = Time.gm(*ary)
=> Tue Oct 21 09:45:14 UTC 2003
irb(main):029:0> t += 7 * 86400
=> Tue Oct 28 09:45:14 UTC 2003
irb(main):030:0>

Regards,

Dalibor Sramek

--
Dalibor Sramek http://www.insu... | In the eyes of cats,
dalibor.sramek@insula.cz | all things belong to cats.


sabbyxtabby

10/21/2003 4:30:00 PM

0

Emmanuel Touzery <emmanuel.touzery@wanadoo.fr> wrote:

> nobu.nokada@softhome.net wrote:
>
> >If you just want dates, what about date.rb?
> >
> > require 'date'
> > today = Date.today
> > today.to_s # => "2003-10-21"
> > (today+5).to_s # => "2003-10-26"
> >
> >I've not tested it with DST though.
>
> otherwise, yes it's probably what i want. unfortunately i now sit on a
> lot of code to convert :O(
> if someone has a way with Time, it would simplify things for me...

Here's half a solution:

class Time
require 'date'
DAY = 60*60*24

alias add +
def +(s)
return add(s) unless s % DAY == 0
d = Date.new(year, mon, day) + s / DAY
Time.local(d.year, d.mon, d.day, hour, min, sec, usec)
end
end

Mark J. Reed

10/21/2003 5:16:00 PM

0


Given a Time representing the instant you care about, you
can get the time N days later by just adding N days' worth
of seconds. Here's a simple method definition:

class Time
SECONDS_PER_DAY = 86_400
def add_days(n)
self + n * SECONDS_PER_DAY
end
end

No Date required.

irb(main):001:0> t = Time.now
=> Tue Oct 21 13:15:03 EDT 2003
irb(main):002:0> t.add_days(5)
=> Sun Oct 26 12:15:03 EST 2003

-Mark

gabriele renzi

10/21/2003 7:22:00 PM

0

il Tue, 21 Oct 2003 16:19:48 +0900, Emmanuel Touzery
<emmanuel.touzery@wanadoo.fr> ha scritto::


>but where is all this stuff documented?
>find.rb, base64.rb, date.rb, the other day someone wanted to remove
>recursively a dir, and was given another one of those magic files...
>which doc did i miss? :O(
>

some is in the pickaxe.
Some you may just found looking at ruby-dir/lib, for the classes like
Array or String there is ri.

You may like to look at rj (as in 'ri'.succ) wich works like ri but
incorporates some more stuff (see on rubyforge).

ruby-doc.org has ri++ wich is 'ri + documentation via web' . Quite
useful too ;)