This article will teach you how to convert datetime to seconds in Python.
After reading this Python article, you’ll learn:
- How to convert datetime to seconds ( number of seconds since epoch).
- How to convert seconds to datetime
Table of contents
What is Epoch time
When we try to convert datetime to seconds, we need to understand the epoch time first.
In computing, an epoch time is a date and time from which a computer measures system time. It is a starting point or fixed moment in time used to calculate the number of seconds elapsed. The computer’s datetime is determined according to the number of seconds elapsed since the epoch time.
Epoch time is also known as POSIX time or UNIX time. For example, in most UNIX versions, the epoch time starts at 00:00:00 UTC on 1 January 1970.
So when we convert datetime to seconds we will get the number of seconds since epoch. It means the elapsed seconds between input datetime and epoch time (00:00:00 UTC on 1 January 1970).
How to convert datetime to Seconds in Python
Let’s assume you have a datetime (2018,10,22) in a UTC format and you want to calculate the number of seconds since the epoch. The below steps shows two ways to convert datetime to seconds.
- Import datetime module
Python datetime module provides various functions to create and manipulate the date and time. Use the
from datetime import datetimestatement to import a
datetimeclass from a datetime module.
- Subtract the input datetime from the epoch time
To convert a datetime to seconds, subtracts the input datetime from the epoch time. For Python, the epoch time starts at 00:00:00 UTC on 1 January 1970. Subtraction gives you the timedelta object. Use the
total_seconds()method of a timedelta object to get the number of seconds since the epoch.
- Use the timestamp() method.
If your Python version is greater than 3.3 then another way is to use the
timestamp()method of a datetime class to convert datetime to seconds. This method returns a float value representing even fractions of a second.
Example: Datetime to Seconds
from datetime import datetime # input datetime dt = datetime(2018, 10, 22, 0, 0) # epoch time epoch_time = datetime(1970, 1, 1) # subtract Datetime from epoch datetime delta = (dt - epoch_time) print('Datetime to Seconds since epoch:', delta.total_seconds())
Datetime to Seconds since epoch: 1540166400.0
Datetime to seconds using timestamp()
A timestamp is encoded information generally used in UNIX, which indicates the date and time at which a particular event has occurred. This information could be accurate to the microseconds. It is a POSIX timestamp corresponding to the datetime instance.
The below code shows how to convert datetime to seconds using the
timestamp() method. This method will only be useful if you need the number of seconds from epoch (1970-01-01 UTC). It returns a number of elapsed seconds since epoch as a float value representing even fractions of a second.
from datetime import datetime # input datetime dt = datetime(2018, 10, 22, 0, 0) print('Seconds since epoch:', dt.timestamp())
Seconds since epoch: 1540146600.0
Note that different timezones have an impact on results. Therefore one should consider converting datetime to UTC before converting it to seconds.
To get an accurate result, you should use the UTC datetime. If your datetime isn’t in UTC already, you’ll need to convert it before using it or attach a tzinfo class with the proper timezone offset. Add
tzinfo=pytz.utc if using Python 2 or
tzinfo=timezone.utc if using Python 3.
Don’t use strptime to convert datetime to seconds using the
%s attribute because Python doesn’t support the
%s attribute. If you use it, Python will use your systems’ strftime, which uses your local timezone, and you will get an inaccurate result. See docs.
Datetime to seconds using a calendar module
The calendar module provides the timegm() method that returns the corresponding Unix timestamp value, assuming an epoch of 1970 and the POSIX encoding.
- import clenadar module
- Use the
datetime.timetuple()to get the time tuple from datetime.
- Next, pass the time tuple to the
calendar.timegm()method to convert datetime to seconds.
import calendar from datetime import datetime # input datetime dt = datetime(2018, 10, 22, 0, 0) print('Datetime to seconds:', calendar.timegm(dt.timetuple()))
Datetime to seconds: 1540166400
- This method strips off the fractions of a second.
- The calendar’s approch has no way to specify a timezone. If input datetime is aware instance and used a timezone different from the system’s timezone, the result would not be correct (the timezone gets lost in the
timetuple()call). To get the correct answer for an ‘aware’ datetime, you can use
Seconds/epoch to Datetime
If you want to convert the number of seconds since the epoch to a datetime object, use the
fromtimestamp() method of a datetime class.
from datetime import datetime # seconds ts = 1540146600.0 # convert seconds to datetime dt = datetime.fromtimestamp(ts) print("datetime is:", dt)
datetime is: 2018-10-22 00:00:00
Converting epoch time with milliseconds to datetime
If you want to convert the milliseconds to a datetime object, use the strptime() method of a datetime class. Use the
%f format code for parsing.
from datetime import datetime seconds = 1536472051807 / 1000.0 dt = datetime.fromtimestamp(seconds).strftime('%Y-%m-%d %H:%M:%S.%f') print('Datetime is:', dt)
Datetime is: 2018-09-09 11:17:31.807000