Datetime still showing time component - python

I have this line of code-
future_end_date = datetime.strptime('2020/02/29','%Y/%m/%d')
and when I print this-
2020-02-29 00:00:00
it still shows the time component even though I did strptime

This is because strptime returns datetime rather than date. Try converting it to date:
datetime.strptime('2020/02/29','%Y/%m/%d').date()

datetime.strptime(date_string, format) function returns a datetime
object corresponding to date_string, parsed according to format.
When you print datetime object, it is formatted as a string in ISO
8601 format, YYYY-MM-DDTHH:MM:SS
So you need to convert the datetime into date if you only want Year, month and Day -
datetime.strptime('2020/02/29','%Y/%m/%d').date()
Another possible way is using strftime() method which returns a string representing date and time using date, time or datetime object.
datetime.strptime('2020/02/29','%Y/%m/%d').strftime('%Y/%m/%d')
Output of both code snippets -
2020/02/29

Related

Convert custom string date to date

Is there a way to convert a string date that is stored in some non-traditional custom manner into a date using datetime (or something equivalent)? The dates I am dealing with are S3 partitions that look like this:
year=2023/month=2/dayofmonth=3
I can accomplish this with several replaces but im hoping to find a clean single operation to do this.
You might provide datetime.datetime.strptime with format string holding text, in this case
import datetime
dt = datetime.datetime.strptime("year=2023/month=2/dayofmonth=3","year=%Y/month=%m/dayofmonth=%d")
d = dt.date()
print(d) # 2023-02-03
you can do that converting your string into a date object using "datetime" combined with strptime() method.
The strtime() takes two arguments, the first is the string to be parsed, and the second a string with the format.
Here's an example:
from datetime import datetime
# your string
date_string = "year=2023/month=2/dayofmonth=3"
# parse the string into a datetime object
date = datetime.strptime(date_string, "year=%Y/month=%m/dayofmonth=%d")
# print the datetime object
print(date)

Get previous day's date from date passed as a string in "YYYY-MM-DD" format

I'm trying to create a helper function getPreviousDay to be used in the backend (Flask).
From the front end, I'm receiving the date in "YYYY-MM-DD" format as a string.
From this, I want to get the date of the previous day in the same format as a string.
Here's a sample code of what I want to achieve.
def getPreviousDay(date):
'''
todo: previousDay should also be a string in "YYYY-MM-DD" format
'''
return previousDay
current_day = "2022-09-29" #YYYY-MM-DD
yesterday = getPreviousDay(current_day)
The datetime module provides date and timedelta types that can be used for this kind of thing. A "time delta" is a difference between two dates or times, in this case, 1 day. Subtracting one day from today's date gives yesterday's date.
import datetime
def getPreviousDay(date):
today = datetime.date.fromisoformat(date)
yesterday = today - datetime.timedelta(days=1)
return yesterday.isoformat()
This returns:
>>> getPreviousDay('2022-09-29')
'2022-09-28'
The reference documentation for the datetime module has more details.

How to convert date string from database to something comparable?

I have timestamps in database formatted like this: 2022-05-03 10:20:30.687 +0200.
I'm trying to convert that to a format that would allow me to compare two timestamps.
But, when I try to print that with
print(datetime.fromtimestamp(last_timestamp, pytz.utc))
I get the following error:
E TypeError: 'datetime.datetime' object cannot be interpreted as an integer
How can I get this to work?
Edit:
It appears I was overthinking this: comparing the strings directly works as expected.
time_stamp1=str('2022-05-03 10:20:30.687 +0200')
time_stamp2=str('2022-05-04 11:21:35.687 +0200')
t1 = datetime.strptime(time_stamp1, "%Y-%m-%d %H:%M:%S.%f %z")
t2 = datetime.strptime(time_stamp2, "%Y-%m-%d %H:%M:%S.%f %z")
diff = t1 - t2
check datetime python for more
As you can read from the documentation, the datetime.fromtimestamp function converts a date in posix format (a 32bit integer) to a local date format.
Return the local date and time corresponding to the POSIX timestamp,
such as is returned by time.time(). If optional argument tz is None or
not specified, the timestamp is converted to the platform’s local date
and time, and the returned datetime object is naive.
If your date is in string format, use the function datetime.strptime(date_time_str, format)

strptime() error - Time from sensor with more than 24 hours (e.g. 24:01:53)

I am using datetime.strptime() to convert a string containing time and date from a sensor into a datetime object.
The code sometimes fails. Minimal example:
datetime.strptime('1/9/2021 24:01:53', '%d/%m/%Y %H:%M:%S')
Output error:
ValueError: time data '1/9/2021 24:01:53' does not match format '%d/%m/%Y %H:%M:%S'
I am guessing this has to do with the fact that the time is more than 23:59:59 - which seems to me a non-realistic time (I would think that 1/9/2021 24:01:53 could potentially be 2/9/2021 00:01:53 - a time format which I have never seen).
Is this a non-standard way of representing time or possibly a hardware/software issue with the sensor acquisition system? If it is a different way of representing time, how can I convert it to a standard datetime object?
Kind regards,
D.F.
If the hour exceeds 23 in a variable representing time, a good option is to create a timedelta from it, which you can then add to a datetime object. For given example that might look like
from datetime import datetime, timedelta
def custom_todatetime(s):
"""
split date/time string formatted as 'DD/MM/YYYY hh:mm:ss' into date and time parts.
parse date part to datetime and add time part as timedelta.
"""
parts = s.split(' ')
seconds = sum(int(x) * 60 ** i for i, x in enumerate(reversed(parts[1].split(':'))))
return datetime.strptime(parts[0], "%d/%m/%Y") + timedelta(seconds=seconds)
s = '1/9/2021 24:01:53'
print(custom_todatetime(s))
# 2021-09-02 00:01:53
Note: conversion of hh:mm:ss to seconds taken from here - give a +1 there if helpful.

How can I convert text to DateTime?

I scraped a website and got the following Output:
2018-06-07T12:22:00+0200
2018-06-07T12:53:00+0200
2018-06-07T13:22:00+0200
Is there a way I can take the first one and convert it into a DateTime value?
Just parse the string into year, month, day, hour and minute integers and then create a new date time object with those variables.
Check out the datetime docs
You can convert string format of datetime to datetime object like this using strptime, here %z is the time zone :
import datetime
dt = "2018-06-07T12:22:00+0200"
ndt = datetime.datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S%z")
# output
2018-06-07 12:22:00+02:00
The following function (not mine) should help you with what you want:
df['date_column'] = pd.to_datetime(df['date_column'], format = '%d/%m/%Y %H:%M').dt.strftime('%Y%V')
You can mess around with the keys next to the % symbols to achieve what you want. You may, however, need to do some light cleaning of your values before you can use them with this function, i.e. replacing 2018-06-07T12:22:00+0200 with 2018-06-07 12:22.
You can use datetime lib.
from datetime import datetime
datetime_object = datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
datetime.strptime documentation
Solution here

Categories