Introduction
Logging, saving records to the database, and accessing files are all common tasks a programmer works on. In each of those cases, date and time play an important role in preserving the meaning and integrity of the data. Programmers often need to engage with date and time.
In this article we will learn how to get the current date and time using Python's built-in datetime module. With that module, we can get all relevant data in one object, or extract the date and time separately.
We will also learn how to adjust our date and time for different time zones. Finally, we'll look at converting datetime
objects to the popular Unix or Epoch timestamps.
Getting the Current Date and Time with datetime
The datetime
module contains various classes to get information about the date and time:
datetime.date
: Stores the day, month and year or a datedatetime.time
: Stores the time in hours, minutes, seconds, and microseconds. This information is independent from any datedatetime.datetime
: Stores bothdate
andtime
attributes
Let's get the current date and time with a datetime.datetime
object, as it is easier to extract date
and time
objects from it. First, let's import the datetime
module:
from datetime import datetime
While it looks strange at first, we are getting the datetime
class from the datetime
module, which are two separate things.
We can use the now()
function to get the an object with the current date and time:
current_datetime = datetime.now()
print(current_datetime)
Running this file will give us the following output:
2019-12-13 12:18:18.290623
The now()
function gave us an object with all date and time of the moment it was created. When we print it, Python automatically formats the object to a string so it can be read by humans easily. You can read our guide on How to Format Dates in Python to learn various ways to print the time.
You can get individual attributes of the date and time like this:
print(current_datetime.year) # 2019
print(current_datetime.month) # 12
print(current_datetime.day) # 13
print(current_datetime.hour) # 12
print(current_datetime.minute) # 18
print(current_datetime.second) # 18
print(current_datetime.microsecond) # 290623
The now()
method is perfect for capturing a moment. However, it is redundant when you only care about either the date or the time, but not both. How can we get date information only?
Getting the Current Date
There are two ways to get the current date in Python. In the Python console, we can get the date from a datetime
object with the date()
method:
>>> from datetime import datetime
>>> current_date = datetime.now().date()
>>> print(current_date)
2019-12-13
However, it does seem like a waste to initialize a datetime
object only to capture the date. An alternative would be to use the today()
method of the date
class:
>>> from datetime import date
>>> current_date = date.today()
>>> print(current_date)
2019-12-13
The datetime.date
class represents a calendar date. Its year
, month
, and day
attributes can be accessed in the same way we access them on the datetime
object.
For example, this print
statement gets each attribute, and also uses the weekday()
method to get the day of the week:
>>> print("It's the %dth day of the week, %dth day of the %dth month of the %dth year" %
... (current_date.weekday()+1, current_date.day, current_date.month, current_date.year))
It's the 5th day of the week, 13th day of the 12th month of the 2019th year
Note: The weekday()
method returns an integer between 0 and 6 to represent the day of the week. 0 corresponds to Monday. Therefore, in our example we added 1 in order to print the 5th day of the week (Friday), although the weekday()
method returned 4.
Now that we can get the current date by itself, let's see how we can get the current time
Getting the Current Time
We capture the current time from a datetime
object using the time()
method:
Check out our hands-on, practical guide to learning Git, with best-practices, industry-accepted standards, and included cheat sheet. Stop Googling Git commands and actually learn it!
>>> from datetime import datetime
>>> current_time = datetime.now().time()
>>> print(current_time)
12:18:18.290623
Unlike retrieving dates, there is no shortcut to capture the current time directly. The datetime.time
class represents a notion of time as in hours, minutes, seconds and microseconds - anything that is less than a day.
Like the datetime
object, we can access its attributes directly. Here's an example where we print the current_time
in a sentence:
>>> print("It's %d o'clock. To be exact, it's %d:%d and %d seconds with %d microseconds" %
... (current_time.hour, current_time.hour, current_time.minute, current_time.second, current_time.microsecond))
It's 12 o'clock. To be exact, it's 12:18 and 18 seconds with 290623 microseconds
By default, the now()
function returns the time of your local timezone. What if we'd need to convert it to a different one which was set in a user's preference? Let's see how we can provide timezone information to get localized time
objects.
Getting the Current Date and Time in Different Timezone
The now()
method accepts a timezone as an argument, so that the datetime
object being generated would be appropriately adjusted. First, we need to get timezone data via the pytz library.
Install the pytz
library with pip
if it's not available on your computer already:
$ pip3 install pytz
Now, let's use pytz
to get the current date and time if we were in Berlin:
>>> import pytz
>>> from datetime import datetime
>>> tz = pytz.timezone('Europe/Berlin')
>>> berlin_current_datetime = datetime.now(tz)
>>> print(berlin_current_datetime)
2019-12-14 00:20:50.840350+01:00
The berlin_current_datetime
would be a datetime
object with all the properties and functions we saw earlier, but now it perfectly matches what it is for someone who lives there.
If you would like to get the time in UTC, you can use the pytz
module like before:
>>> import pytz
>>> from datetime import datetime
>>> utc_current_datetime = datetime.now(pytz.timezone("UTC"))
>>> print(utc_current_datetime)
2019-12-13 23:20:50.840350+00:00
Alternatively, for UTC time you don't have to use the pytz
module at all. The datetime
module has a timezone
property, which can be used like this:
>>> from datetime import datetime, timezone
>>> utc_current_datetime = datetime.now(timezone.utc)
>>> print(utc_current_datetime)
2019-12-13 23:20:50.840350+00:00
Now that we can convert our dates and times to match different time zones, let's look at how we can convert it to one of the most widely used formats in computing - Unix timestamps.
Converting Timestamps to Dates and Times
Computer systems measure time based on the number of seconds elapsed since the Unix epoch, that is 00:00:00 UTC on January 1st, 1970. It's common for applications, databases, and protocols to use a timestamp in order to display time.
You can get the current timestamp in Python using the time
library:
>>> import time
>>> print(time.time())
1576280665.0915806
The time.time()
function returns a float number with the Unix timestamp. You can convert a timestamp to a datetime
object using the fromtimestamp()
function:
>>> from datetime import datetime
>>> print(datetime.fromtimestamp(1576280665))
2019-12-13 19:44:25
By default, the fromtimestamp()
returns a datetime
object in your timezone. You can provide a timezone as a second argument if you would like to have it localized differently.
For example, to convert a timestamp to a datetime
object in UTC, you can do this:
>>> from datetime import datetime, timezone
>>> print(datetime.fromtimestamp(1576280665, timezone.utc))
2019-12-13 19:44:25+00:00
Conversely, you can use the timestamp()
method to convert a datetime
object to a valid timestamp:
>>> from datetime import datetime, timezone
>>> print(datetime.now(timezone.utc).timestamp())
1577117555.940705
Conclusion
Python's built-in datetime
library allows us to get the current date and time with the now()
function. We can use the returned datetime
object to extract just the date portion or the time portion. We can also get the current date with the today()
function.
By default, Python creates datetime
objects in our local timezone. If we utilize the pytz
library, we can convert dates and times into different time zones.
Finally, we used the fromtimestamp()
function to take a Unix timestamp to get a datetime
object. If we have a datetime
object, we can get a timestamp using its timestamp()
method.