Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determine start and end time of current day (UTC -> EST -> UTC) ; Python

I am storing all my times in UTC and my system is set to UTC (though I am in EST).

I have dates stored as:

Wed, 20 Feb 2013 03:51:39 +0000 

However, I would like to select information based off today for EST, so I am attempting to:

  • Get current time as UTC and change to EST

    datetime.utcnow().replace(tzinfo=tz.tzutc()).astimezone(tz.gettz('America/New_York')) 2013-02-19 23:17:20.560898-05:00 
  • Next I want to get the start time for the EST day (2013-02-19 00:00:00.000000-05:00) and the end time (2013-02-19 23:59:59.99999-05:00)

  • Once I have those values, I'd like to convert back to UTC, so I have a high and low value I can clamp by that's correct my EST (my timezone).

If this isn't the best way to do this, or I'm missing something (does seem overly complicated to me) please help me see the light!

TIA

Update per answer:

d1 = datetime.utcnow().replace(tzinfo=tz.tzutc()).astimezone(tz.gettz('America/New_York')) print d1.strftime("%m %d %Y") ; d2 = d1.replace(day=d1.day + 1) ; print d2.strftime("%m %d %Y") 

That will give me

02 20 2013 02 21 2013 

Which is correct. I now need to generate the full EST time from that and then convert to UTC. This I cannot figure out. Actually, I probably want to convert to UTC epoch timestamp when complete because that will make my database operations pretty easy (<, >, ==, etc).

like image 260
mr-sk Avatar asked Feb 20 '13 05:02

mr-sk


People also ask

How do I get the current time in Python est?

from datetime import datetime from pytz import timezone tz = timezone('EST') datetime. now(tz) ## this returns a datetime object pointing to right now ## according to the timezone info object handed in as the tz variable.

Is Python datetime in UTC?

You can use the datetime module to convert a datetime to a UTC timestamp in Python. If you already have the datetime object in UTC, you can the timestamp() to get a UTC timestamp. This function returns the time since epoch for that datetime object.


1 Answers

The first step of getting current time as UTC and converting it to EST seems a bit pointless. Do you use that time for anything?

Other than that it seems rather straighforward. You want to get the start and end of a day EST in UTC, so you create them and convert them to UTC. That's not so complicated. :-)

You might want to look at your matching routines though, so that you can use the start of today as the lower value, and the start of tomorrow as the higher, so you don't have to deal with that 23:59:59.9999 time.

Update:

From my original understanding of your question, this is what you want to do:

First you want to get the current date as it is in UTC (so at 11pm EST the 12st, you want the 22nd, as it is the 22nd in UTC then.

>>> from datetime import datetime >>> today = datetime.utcnow().date() >>> today datetime.date(2013, 2, 21) 

Secondly you want 00:00:00 of that day in UTC, as start for a search.

>>> from dateutil import tz >>> start = datetime(today.year, today.month, today.day, tzinfo=tz.tzutc()) datetime.datetime(2013, 2, 21, 0, 0, tzinfo=tzutc()) 

Except that you want to know what that time is in New York:

>>> from dateutil import tz >>> est = tz.gettz('America/New_York') >>> start = start.astimezone(est) >>> start datetime.datetime(2013, 2, 20, 19, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/New_York')) 

And you also want tomorrow as the end:

>>> from datetime import timedelta >>> end = start + timedelta(1) >>> end datetime.datetime(2013, 2, 21, 19, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/New_York')) 

Summary:

today = datetime.utcnow().date() start = datetime(today.year, today.month, today.day, tzinfo=tz.tzutc()).astimezone(est) end = start + timedelta(1) 
like image 97
Lennart Regebro Avatar answered Sep 19 '22 00:09

Lennart Regebro