how to get timezone-aware midnight datetime in python? [duplicate] - python

This question already has answers here:
How do I get the UTC time of "midnight" for a given timezone?
(6 answers)
Closed 8 years ago.
I'm working in django, but standard python solution is ok too.
I'm converting a code which uses a naive-datetime to use aware-datetime.
Below is the original code:
today = datetime.today()
MyClass.objects.filter(datetimefield__range=(today, today+datetime.timedelta(1)) )
How do I convert it to use timezone-aware time?
If the time is jun/3rd/7:20pm locally,
I'd like to get datetime range of [jun/3rd/00:00am, jun/4th/00:00am]
(midnight to midnight which will include now)

I know this is very old, but using django.utils.timezone this is fairly straightforward.
(nothing concerning timezones ever seems easy to me)
# this is could be any datetime.date
my_date = timezone.now().date()
dt_at_local_midnight = timezone.make_aware(
timezone.datetime.combine(my_date, time.min),
timezone.get_current_timezone())
and alternative that might be better is listed in the first comment below.

Related

Convert Date time to UTC Time in python [duplicate]

This question already has answers here:
How do I parse an ISO 8601-formatted date?
(29 answers)
Parsing date, time and zone to UTC datetime object
(1 answer)
Closed 9 months ago.
I have datetime value in format of 2022-01-26T07:01:36-08:00 (based on which user fetches data, it will have local timezone, like -08:00, +05:30)
I want to convert this time into UTC Time.
I saw multiple example of pytz but couldn't figure out how to convert using pytz or datetime. datetime value will be based on machine timezone so I can't hard code timezone value also.

How to convert a Zulu timestamp to local time zone? [duplicate]

This question already has answers here:
Convert zulu time string to MST datetime object
(2 answers)
How do I parse an ISO 8601-formatted date?
(29 answers)
Closed 1 year ago.
I know this question has been asked in different forms, but I'm not finding what I need. I'm looking for a way to convert the following date / time to my local time zone using Python. Note the time zone of "Z" and the "T" between the date and time, this is what's throwing me off.
"startTime": "2021-03-01T21:21:00.652064Z"
the datetime module is your friend. You seem to be dealing with a date-time stamp in ISO format. The datetime module has a class method to generate a datetime object from an ISO formatted string.
from datetime import datetime
dateinput = "2021-03-01T21:21:00.652064Z"
stamp = datetime.fromisoformat(dateinput)
But here you will get an error because the trailing 'Z' is not quite right. If you know that it's always going to be there, just lop off the last character. Otherwise you might have to do some string manipulation first.
stamp = datetime.fromisoformat(dateinput[:-1])
See also the strptime() class method to get datetime objects from arbitrarily formatted strings.
Hoping this helps...
datetime and pytz modules! Also depends on what you need, but below is the date and time object without the miliseconds part and a simple conversion to Berlin timezone.
import datetime
from pytz import timezone
berlin_timezone = pytz.timezone('Europe/Berlin')
your_time = datetime.datetime.strptime(startTime.split(".")[0], "%Y-%m-%dT%H:%M:%S")
your_time_utc = your_time.astimezone(berlin_timezone)

How to find the current date [duplicate]

This question already has answers here:
Getting today's date in YYYY-MM-DD in Python?
(12 answers)
Closed 4 years ago.
I need to get the current date but in this format:
<dd>/<mm>/<yyyy>
Is there any method that i can use?
I only found different formats and things I can't use for now.
For working with python.
Try this:
from datetime import date
timeNow = str(datetime.now())
print(timeNow)
import datetime
d = datetime.datetime.today()
print (datetime.date.strftime(d, "%d/%m/%y"))

Changing Date/Time in python pandas [duplicate]

This question already has answers here:
Convert hh:mm:ss to minutes using python pandas
(3 answers)
Closed 5 years ago.
So I have Date/Time string in a pandas dataframe that looks like this:
2016-10-13 02:33:40
And I need to cut out the year/month/day completely, and convert the time to minutes. So that time/date above needs to be converted into just:
153
^^2 hours and 33 minutes = 153 minutes
I am basically trying to sift the data by the amount of time in between each entry and converting it all to minutes (since the amount of time that passes will not go past a day per session) seemed to make the most sense to me. But, I am open to any other suggestions!
Thanks for the help
lets say the date and time is in a column called DateTime.
df["Datetime"] = pd.to_datetime(df["Datetime"])
df["Minutes"] = 60*df["Datetime"].dt.hour +df["Datetime"].dt.minute
There once the datetime column is in the right format, you can access a lot of properties. See here for more https://pandas.pydata.org/pandas-docs/stable/api.html#datetimelike-properties

Assign timezone to a Python datetime [duplicate]

This question already has answers here:
pytz localize vs datetime replace
(4 answers)
Closed 8 years ago.
Assume that I have a timezone-less datetime object:
import datetime
import pytz
fmt = "%Y-%m-%d %H:%M:%S %Z%z"
dtUnaware = datetime.datetime(1979,2,20,6)
print(dtUnaware.strftime(fmt))
This yields:
1979-02-20 06:00:00
So far, so good. Now, I want to assign a timezone to this object. It seems like I could use either datetime.replace or pytz.localize.
First:
dtAware1 = dtUnaware.replace(tzinfo=pytz.timezone('Asia/Jerusalem'))
print(dtAware1.strftime(fmt))
returns: 1979-02-20 06:00:00 LMT+0221. Secondly:
dtAware2 = pytz.timezone('Asia/Jerusalem').localize(dtUnaware, is_dst=None)
print(dtAware2.strftime(fmt))
returns 1979-02-20 06:00:00 IST+0200.
What's wrong with the first method? It seems to assign a wrong timezone. Am I doing something wrong?
From Pytz documentation : This library differs from the documented Python API for
tzinfo implementations; if you want to create local wallclock
times you need to use the localize() method documented in this
document... Unfortunately these
issues cannot be resolved without modifying the Python datetime
implementation (see PEP-431)
My reading of that is that a pytz timezone is not exactly the same thing as a standard timezone. If you had a genuine timezone, first method should be good, but you have not.
There is a flaw in the datetime API: when you assign a timezone to it, the timezone is not given the opportunity to know the date and time it should be configured for. The historical database that pytz uses goes back a long way, often to periods when the timezone name or offset were different than the ones in use today. Without being given the chance to adjust to a specific date period, the details of the timezone may be wrong.
Using localize is the way around this problem, since both the date and timezone are available within the function at the same time.

Categories