Velocity Reviews > time as float since Jan 1, 0001?

time as float since Jan 1, 0001?

Roy Smith
Guest
Posts: n/a

 02-23-2013
I'm working with matplotlib.plot_date(), which represents time as
"floats starting at January 1st, year 0001". Is there any
straight-forward way to get that out of a datetime?

datetime.toordinal() gives me the number of days since that epoch, but
as an integer. I figured it wouldn't be too hard to just do:

t.toordinal() + t.time().total_seconds()

except it turns out that only timedelta supports total_seconds(); time
doesn't!

I suppose I could do:

t.toordinal() + t.hour / 24.0 \
+ t.minute / 1440.0 \
+ t.second / 86400.0

but that's really ugly. Is there no cleaner way to do this conversion?

Mark Lawrence
Guest
Posts: n/a

 02-23-2013
On 23/02/2013 13:29, Roy Smith wrote:
> I'm working with matplotlib.plot_date(), which represents time as
> "floats starting at January 1st, year 0001". Is there any
> straight-forward way to get that out of a datetime?
>
> datetime.toordinal() gives me the number of days since that epoch, but
> as an integer. I figured it wouldn't be too hard to just do:
>
> t.toordinal() + t.time().total_seconds()
>
> except it turns out that only timedelta supports total_seconds(); time
> doesn't!
>
> I suppose I could do:
>
> t.toordinal() + t.hour / 24.0 \
> + t.minute / 1440.0 \
> + t.second / 86400.0
>
> but that's really ugly. Is there no cleaner way to do this conversion?
>

IIRC you needn't bother, matplotlib will do all the conversions for you.
In the highly likely case that I'm wrong this should help
http://matplotlib.org/api/dates_api....tplotlib.dates

--
Cheers.

Mark Lawrence

Chris Angelico
Guest
Posts: n/a

 02-23-2013
On Sun, Feb 24, 2013 at 12:29 AM, Roy Smith <(E-Mail Removed)> wrote:
> datetime.toordinal() gives me the number of days since that epoch, but
> as an integer. I figured it wouldn't be too hard to just do:
>
> t.toordinal() + t.time().total_seconds()

What about t.timestamp()? That's since 1970, but you could add (if my
calculations are correct) 62135683200.0 to it.

ChrisA

Roy Smith
Guest
Posts: n/a

 02-23-2013
In article <(E-Mail Removed)>,
Mark Lawrence <(E-Mail Removed)> wrote:

> On 23/02/2013 13:29, Roy Smith wrote:
> > I'm working with matplotlib.plot_date(), which represents time as
> > "floats starting at January 1st, year 0001". Is there any
> > straight-forward way to get that out of a datetime?
> >
> > datetime.toordinal() gives me the number of days since that epoch, but
> > as an integer. I figured it wouldn't be too hard to just do:
> >
> > t.toordinal() + t.time().total_seconds()
> >
> > except it turns out that only timedelta supports total_seconds(); time
> > doesn't!
> >
> > I suppose I could do:
> >
> > t.toordinal() + t.hour / 24.0 \
> > + t.minute / 1440.0 \
> > + t.second / 86400.0
> >
> > but that's really ugly. Is there no cleaner way to do this conversion?
> >

>
> IIRC you needn't bother, matplotlib will do all the conversions for you.
> In the highly likely case that I'm wrong this should help
> http://matplotlib.org/api/dates_api....tplotlib.dates

Duh! I didn't get that far in the docs! Thanks, that makes life a lot
easier.

Still, it seems like allowing toordinal() and fromordinal() to handle
floats would be a useful addition

Dennis Lee Bieber
Guest
Posts: n/a

 02-23-2013
On Sat, 23 Feb 2013 08:49:08 -0500, Roy Smith <(E-Mail Removed)> declaimed
the following in gmane.comp.python.general:

> Still, it seems like allowing toordinal() and fromordinal() to handle
> floats would be a useful addition

But "ordinals" aren't floats... <G>

--
Wulfraed Dennis Lee Bieber AF6VN
http://www.velocityreviews.com/forums/(E-Mail Removed) HTTP://wlfraed.home.netcom.com/