When dealing with data, we often find ourselves handling date and time. Although it is not particularly difficult, I often find myself googling the same conversion over and over again.
In this post, I'll share a cheat sheet of date and time conversion to eliminate such little time-consuming procedures and explain each technique in the following sections.
Table of Contents
1️⃣ String to DateTime object
2️⃣ DateTime object to String
3️⃣ String to String
4️⃣ UTC timestamp in seconds to DateTime object
5️⃣ UTC timestamp in seconds to String
6️⃣ UTC time string to UTC DateTime object in different GMT
7️⃣24-hour time String to 12-hour time String
7️⃣Download PDF file
String to DateTime object
Input Example: String "08/04/2021"
Output: Datetime object "2021-04-08 00:00:00"
We can use datetime.strptime
to create a DateTime object from a string. strptime
method takes two arguments -- target string and string to explain the format of the target string.
DateTime object to String
Input Example: DateTime object "2021-04-08 00:00:00"
Output: String "08/04/2021"
We can use datetime.strftime
to convert a DateTime object into String. This strftime
method takes two arguments -- DateTime object and String to specify desired string format.
String to String
Input Example: String "08/04/2021"
Output: String "2021-04-08"
To convert datetime string into a different format of a string, we first need to convert it into a DateTime object. Then we can use strptime
to specify and convert into the desired format.
UTC timestamp in seconds to DateTime object
Input Example: float 1617836400.0
(UTC timestamp in seconds)
Output: DateTime object with "2021-04-08 00:00:00"
To convert float of timestamp into a DateTime, can use datetime.fromtimestamp()
. It takes timestamp as an argument and returns DateTime object.
UTC timestamp in seconds to String
Input Example: float 1617836400.0
(UTC timestamp in seconds)
Output: String "08/04/2021"
To convert float of timestamp into String, we first get a DateTime object. Using strftime
method, we can then create desired format of String.
UTC time string to UTC DateTime object in different GMT
Input Example: String "08-04-2021 08:33:00-0400"
(New York timezone)
Output: DateTime object "2021-04-08 21:33:00+09:00"
(Tokyo timezone)
To convert an UTC time string, we first convert it into a DateTime object. After that, we can use astimezone
method to create a DateTime object in specified GMT.
24-hour time String to 12-hour time String
Input Example: String "20:00"
Output: String "08:00 PM"
We first need to convert String into a DateTime object. Right after, 12-hour time string can be created using strftime
method.
Download PDF file
Thanks for reading. If you have any opinion or question, please leave a comment below! In the meantime, please follow me on Linkedin @Maiko Miyazaki or Twitter @Maiko Miyazaki
Top comments (6)
Really nice and clean! I would say the one thing to note for newbies who are using this - timestamp values are based on the number of seconds since epoch (January 01, 1970 UTC). I know it says the type is of
timestamp
, but one can forget to what order we base things off of - regardless, well done!Thank you so much for pointing out Justin :) With your comment, I realized that I was not fully aware of the timestamp! As a result, I've managed to improve the article and PDF to clarify the values and types of the example. Thank you for taking your time to share it here! 😊🙏
Thank you Maiko San, this cheat sheet is very usefull. Just to share something I faced recently..
I wanted to get the timestamp from the time in a logcat file. The time was something like:
'00:00:11.493'
(the date was not significant for me)
In a first approach I did that:
dt = datetime.strptime('00:00:11.493', '%H:%M:%S.%f')
It seemed to be correct:
dt
datetime.datetime(1900, 1, 1, 0, 0, 11, 493000)
But I got an error
dt.timestamp()
Traceback (most recent call last):
File "<string>", line 1, in <module>
OSError: [Errno 22] Invalid argument
So I added a date
dt = datetime.strptime('01-01-2023 00:00:11.493', '%d-%m-%Y %H:%M:%S.%f')
dt
datetime.datetime(2023, 1, 1, 0, 0, 11, 493000)
And it worked
dt.timestamp()
1672527611.493
I investigated further and it appears something becomes wrong just before
dt = datetime.strptime('02-01-1970 01:00:00.000', '%d-%m-%Y %H:%M:%S.%f')
It seems to me that the default date (1900) is not consistent ?
Python 3.10.7
Windows 10 21H2
Hi Philippe, thanks for your comment!
I found this answer:
The reason why datetimes before 1970 may not work correctly on Windows systems is because of the way that Windows represents dates and times.
In Windows, dates and times are stored internally as the number of 100-nanosecond intervals that have elapsed since January 1, 1601, at 12:00:00 AM (UTC). This is known as the "Windows epoch".
However, many programming languages and libraries, including the popular C runtime library used by many Windows applications, use a different epoch known as the "Unix epoch", which is January 1, 1970, at 12:00:00 AM (UTC). This means that when working with dates and times in these languages and libraries, the values are typically calculated relative to the Unix epoch.
When a date before January 1, 1970, is used in a Windows system, the value calculated by subtracting the date from the Windows epoch is negative, which can lead to unexpected behavior and errors in some applications. This is because some programming languages and libraries may not handle negative values correctly, or may assume that all dates and times are relative to the Unix epoch.
To avoid these issues, it is important to be aware of the differences in epoch between Windows and Unix, and to use appropriate conversion functions or libraries when working with dates and times in Windows systems.
This conversation may help you to apply workaround: stackoverflow.com/questions/726604...
Good one!!
Thank you Pawan!