Open In App

Manipulate Date and Time with the Datetime Module in Python

Improve
Improve
Like Article
Like
Save
Share
Report

Have you ever wondered about working with Date and Time with Python? If you have then you must have noticed that Python does not provide any built-in method to work with either Date or Time. But thanks to the DateTime module that comes pre-loaded with Python’s standard utility modules we can easily manipulate date and time according to our own need. We can even perform operations like getting a current date, adding or subtracting date and time, and much more.

In this article, we will learn all the operations that can be performed on the Date and Time using the DateTime module in Python. So before starting let’s see the basics of the DateTime module and the classes it contains.

The datetime classes are categorized into 6 main classes –

  • date – An idealized naive date, assuming the current Gregorian calendar always was, and always will be, in effect. Its attributes are year, month and day.
  • time – An idealized time, independent of any particular day, assuming that every day has exactly 24*60*60 seconds. Its attributes are hour, minute, second, microsecond, and tzinfo.
  • datetime – Its a combination of date and time along with the attributes year, month, day, hour, minute, second, microsecond, and tzinfo.
  • timedelta – A duration expressing the difference between two date, time, or datetime instances to microsecond resolution.
  • tzinfo – It provides time zone information objects.
  • timezone – A class that implements the tzinfo abstract base class as a fixed offset from the UTC (New in version 3.2).

Getting the Current Date and Time

To get both the current Date and Time datetime.now() method is used. It returns the local current date and time.

Syntax:

datetime.now(tz)

Example:

Python3




# Python3 code to demonstrate 
# Getting current date and time using 
# now(). 
      
# importing datetime module for now() 
import datetime 
      
# using now() to get current time 
current_time = datetime.datetime.now() 
      
# Printing value of now. 
print ("Time now at greenwich meridian is : ", end = "") 
print (current_time) 


Output:

Time now at greenwich meridian is : 2021-03-16 17:59:03.837572

The now() function has various attributes that can give the desired detail from the above output. Some of the attributes are year, month, date, hour, minute, second. See the below example for a better understanding.

Example:

Python3




# Python3 code to demonstrate 
# attributes of now() 
      
# importing datetime module for now() 
import datetime 
      
# using now() to get current time 
current_time = datetime.datetime.now() 
      
# Printing attributes of now(). 
print ("The attributes of now() are : "
      
print ("Year : ", end = "") 
print (current_time.year) 
      
print ("Month : ", end = "") 
print (current_time.month) 
      
print ("Day : ", end = "") 
print (current_time.day) 
      
print ("Hour : ", end = "") 
print (current_time.hour) 
      
print ("Minute : ", end = "") 
print (current_time.minute) 
      
print ("Second : ", end = "") 
print (current_time.second) 
      
print ("Microsecond : ", end = "") 
print (current_time.microsecond)


Output:

The attributes of now() are : 
Year : 2021
Month : 3
Day : 16
Hour : 18
Minute : 1
Second : 59
Microsecond : 490402

Getting only current Date

DateTime module also provides another method called today() that only prints the value of today’s date.

Example:

Python3




# Python program to get 
# current date 
  
  
# Import date class from datetime module 
from datetime import date 
  
  
# Returns the current local date 
today = date.today() 
print("Today date is: ", today)


Output:

Today date is:  2021-03-16

Getting Only current Time

We can create a time object using the time() function. Consider the below example.

Example:

Python3




from datetime import datetime 
  
# Time object containing 
# the current time. 
time = datetime.now().time() 
  
print("Current Time =", time)


Output:

Current Time = 18:13:35.003918

Refer to the below articles to get detailed information about getting the current date and time.

Formatting Date and Time

Across various regions in the world, different types of date formats are used. DateTime provides strftime() method to deal with such formatting. This function is used to convert date and time objects to their string representation. It takes one or more input of formatted code and returns the string representation.

Syntax:

strftime(format)

Example:

Python3




# Python program to demonstrate 
# strftime() function 
  
  
from datetime import datetime
  
# Getting current date and time 
now = datetime.now() 
print("Without formatting", now) 
  
# Example 1 
s = now.strftime("%a %m %y"
print('\nExample 1:', s) 
  
# Example 2 
s = now.strftime("%A %-m %Y"
print('\nExample 2:', s) 
  
# Example 3 
s = now.strftime("%-I %p %S"
print('\nExample 3:', s) 
  
# Example 4 
s = now.strftime("%-j"
print('\nExample 4:', s)


Output:

Without formatting 2021-03-16 18:28:59.055609

Example 1: Tue 03 21

Example 2: Tuesday 3 2021

Example 3: 6 PM 59

Example 4: 75

Refer to the below article to get detailed information about formatting date and time in Python.

Handling timedelta objects

Python timedelta() function is present under datetime library which is generally used for calculating differences in dates and also can be used for date manipulations in Python.

Syntax:

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

Example:

Python3




# import datetime
from datetime import timedelta
  
# create timedelta object with difference 
# of 1 weeks
d1 = timedelta(weeks=1)
  
# create timedelta object with difference 
# of 1 weeks
d2 = timedelta(days=30)
  
print(d1)
print(d2)


Output:

7 days, 0:00:00
30 days, 0:00:00

We can also use the + and operators to add or subtract the timedelta objects from datetime objects.

Example:

Python3




# Timedelta function demonstration 
      
from datetime import datetime, timedelta 
      
      
# Using current time 
ini_time_for_now = datetime.now() 
      
# printing initial_date 
print ("initial_date", str(ini_time_for_now)) 
      
# Calculating future dates 
# for two years 
future_date_after_2yrs = ini_time_for_now + timedelta(days = 730
      
future_date_after_2days = ini_time_for_now + timedelta(days = 2
      
# printing calculated future_dates 
print('future_date_after_2yrs:', str(future_date_after_2yrs)) 
print('future_date_after_2days:', str(future_date_after_2days)) 


Output:

initial_date 2021-03-16 18:47:53.103230
future_date_after_2yrs: 2023-03-16 18:47:53.103230
future_date_after_2days: 2021-03-18 18:47:53.103230

Note: The output will be a DateTime object.

Difference Between two dates

As discussed above, timedelta object represents the difference between the two dates. We can subtract one date from another and the resultant will be a timedelta object.

Example 1:

Python3




# import datetime
from datetime import date
  
  
# Create two dates with year, month, 
# date
d1 = date(2021, 3, 16)
d2 = date(2021, 3, 31)
  
# Difference between two dates
diff = d2 - d1
  
print("Difference: ", diff.days)


Output:

Difference:  15

Example 2:

Python3




# import datetime
from datetime import datetime
  
  
# Create two dates with year, month, 
# date, hour, minute, seconds
d1 = datetime(2021, 3, 16, 19, 6, 6)
d2 = datetime(2021, 3, 31, 12, 2, 2)
  
# Difference between two dates
diff = d2 - d1
  
print("Difference: ", diff)


Output:

Difference:  14 days, 16:55:56

Refer to the below articles to get detailed information about finding differences in date.

Comparing Dates

The dates can also be compared using comparison operators (like <, >, <=, >=, != etc.)

Example 1: Using comparison operators

Python3




# Simple Python program to compare dates 
  
# importing datetime module 
import datetime 
  
# date in yyyy/mm/dd format 
d1 = datetime.datetime(2018, 5, 3
d2 = datetime.datetime(2018, 6, 1
  
# Comparing the dates will return 
# either True or False 
print("d1 is greater than d2 : ", d1 > d2) 
print("d1 is less than d2 : ", d1 < d2) 
print("d1 is not equal to d2 : ", d1 != d2)


Output:

d1 is greater than d2 :  False
d1 is less than d2 :  True
d1 is not equal to d2 :  True

Refer to the below article to get detailed information about comparing dates.

Working with Different Timezones

The datetime.now() does not have any information about the time zones. It just uses the current system time. In some situations, the time zone details may be needed. In such cases the tzinfo abstract class is used. tzinfo is an abstract base class. It cannot be instantiated directly. A concrete subclass has to derive it and implement the methods provided by this abstract class.

Naive and Aware datetime objects

A datetime object which does not contain any information on time zone is said to be a naive datetime object. For a naive datetime object, datetime_object.tzinfo will be None. An Aware datetime object contains the time zone information embedded in it.

The methods available for implementation in tzinfo base class are :

  • utcoffset(): It returns the offset of the datetime instance passed as an argument. It refers to the time zone offset which denotes how many hours the time zone is ahead of the Coordinated Universal Time or Universal Time Coordinate (UTC). The offset is written as +00:00. For example: for Asia/Taipei, it is written as UTC +08:00.
  • dst(): It is abbreviated as Day-light Saving Time. It denotes advancing the clock 1 hour in the summertime so that darkness falls later according to the clock. It is set to on or off. It is checked based on a tuple containing 9 elements as follows :

(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, 0)

  • tzname(): This is used to find the time zone name of the datetime object passed. It returns a Python String object.
  • fromutc(): This function takes up the date and time of the object in UTC and returns the equivalent local time. It is used mostly for adjusting the date and time. It is called from default datetime.astimezone() implementation. The dt.tzinfo will be passed as self, dt’s date and time data will be returned as an equivalent local time.

Example:

Python3




import datetime as dt 
from dateutil import tz 
  
  
tz_string = dt.datetime.now(dt.timezone.utc).astimezone().tzname() 
  
print("datetime.now() :", tz_string) 
  
NYC = tz.gettz('Europe / Berlin'
dt1 = dt.datetime(2015, 5, 21, 12, 0
dt2 = dt.datetime(2015, 12, 21, 12, 0, tzinfo = NYC) 
  
print("Naive Object :", dt1.tzname()) 
print("Aware Object :", dt2.tzname())


Output:

datetime.now() : UTC
Naive Object : None
Aware Object : CET

We can also use pytz module to deal with cross-timezones conversion. Let’s see how it works.

Using Pytz

Pytz brings the Olson tz database into Python and thus supports almost all time zones. This module serves the date-time conversion functionalities and helps user serving international client’s base.

By using astimezone() function we can convert the time into a different timezone.

Syntax:

astimezone(t)

Example:

Python3




from datetime import datetime 
from pytz import timezone 
  
format = "%Y-%m-%d %H:%M:%S %Z%z"
  
# Current time in UTC 
now_utc = datetime.now(timezone('UTC')) 
print(now_utc.strftime(format)) 
  
# Convert to Asia/Kolkata time zone 
now_asia = now_utc.astimezone(timezone('Asia/Kolkata')) 
print(now_asia.strftime(format))


Output:

2021-03-17 07:41:19 UTC+0000
2021-03-17 13:11:19 IST+0530

Refer to the below articles to get detailed information about working with timezones.



Last Updated : 12 May, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads