Python datetime module
Python offers a module named datetime to work with dates and times. Let us create different simple programs related to date and time before going dip.
Get Current Date and Time
import datetime
datetime_obj = datetime.datetime.now()
print(datetime_obj)
After running the above program, the output will be as follows:
2017-10-27 04:45:18.213510
Above, we imported the datetime module using import module
statement.
Inside the datetime
module, there is a datetime
class. We called now()
method to create a datetime
object which contains the current local date and time.
Get Current Date
import datetime
date_obj = datetime.date.today()
print(date_obj)
After running the above program, the output will be as follows:
2017-10-27
Above, we have used today()
method defined in the date
class to get a date
object containing the current local date.
What's inside datetime?
We can use dir()
function to list all attributes of a module.
import datetime
print(dir(datetime))
The output of the above code will be as follows:
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta', 'timezone', 'tzinfo']
The most used classes in the datetime
module are:
- date Class
- time Class
- datetime Class
- timedelta Class
datetime.date Class
We can instantiate date
object from the date
class. A date object represents a date (year, month, and day)
Example: Date object to represent a date
import datetime
d = datetime.date(2017, 3, 16)
print(d)
After running the above program, the output will be as follows:
2017-03-16
The date()
in the above code is a constructor of the date
class. The constructor accepts three arguments: year, month and day.
The variable d
is a date
object.
To only import date
class from the datetime
module, we can write the following code:
from datetime import date
d = datetime.date(2017, 3, 16)
print(d)
Example: Get current date
We can create a date
object containing the current date using a classmethod named today()
.
from datetime import date
today = date.today()
print("Current date: ", today)
Output
Current date: 2017-10-27
Example: Get date from a timestamp
Python makes it also possible to create date
objects from a timestamp. A Unix timestamp is the number of seconds between a given date and January 1, 1970 at UTC. We can convert a timestamp to date using fromtimestamp
method.
from datetime import date
timestamp = date.fromtimestamp(985454597)
print("Date =", timestamp)
After running the program, the output will be:
Date = 2001-03-24
Example: Print today's year, month and day
We can get a year, month, day day of the week from the date object as follows:
from datetime import date
today = date.today()
print("Current year:", today.year)
print("Current month:", today.month)
print("Current day:", today.day)
Output
Current year: 2017
Current month: 10
Current day: 27
datetime.time
A time object instantiated from the time
class represents the local time.
Exmaple: Time object to represent time
from datetime import time
a = time()
print("a =", a)
b = time(10, 30, 40)
print("b =", b)
c = time(hour = 10, minute = 30, second = 40)
print("c =", c)
d = time(10, 30, 40, 12124)
print("d =", d)
The output of the above program will be:
a = 00:00:00
b = 10:30:40
c = 10:30:40
d = 10:30:40.012124
Example: Print hour, minute, second and microsecond
After creating a time
object, we can easily print its attributes such as hour
, minute
etc.
from datetime import time
x = time(10, 30, 40)
print("hour =", x.hour)
print("minute =", x.minute)
print("second =", x.second)
print("microsecond =", x.microsecond)
The output of the above code will be as follows:
hour = 10
minute = 30
second = 40
microsecond = 12124
The default value of the microsecond
argument is 0
.
datetime.datetime
The datetime
module has a class named datetime
that contain information from both date and time objects.
Example: Python datetime object
from datetime import datetime
# datetime(year, month, day)
x = datetime(2017, 10, 27)
print(x)
# datetime(year, month, day, hour, minute, second, microsecond)
y = datetime(2017, 10, 27, 10, 30, 40, 45455)
print(y)
After executing the above program, the output will be:
2017-10-27 00:00:00
2017-10-27 10:30:40.045455
The first three arguments year
, month
and day
of the datetime()
constructor are mandatory.
Example: Print year, month, hour, minute and timestamp
from datetime import datetime
x = datetime(2017, 10, 27, 10, 30, 40, 45455)
print("year =", x.year)
print("month =", x.month)
print("hour =", x.hour)
print("minute =", x.minute)
print("timestamp =", x.timestamp())
The output of the above program will be as follows:
year = 2017
month = 10
hour = 10
minute = 30
timestamp = 1509100240.045455
datetime.timedelta
A timedelta
object represents the difference between two dates or times.
Example: Difference between two dates and times
from datetime import datetime, date
t1 = date(year = 2019, month = 6, day = 14)
t2 = date(year = 2018, month = 3, day = 10)
t3 = t1 - t2
print("t3 =", t3)
t4 = datetime(year = 2016, month = 6, day = 14, hour = 8, minute= 23, second= 35)
t5 = datetime(year = 2017, month = 3, day = 10, hour = 4, minute = 28, second = 40)
t6 = t4 - t5
print("t6 =", t6)
print("type of t3 =", type(t3))
print("type of t6 =", type(t6))
After executing the above program, the output will be as follows:
t3 = 461 days, 0:00:00
t6 = -269 days, 3:54:55
type of t3 = <class 'datetime.timedelta'>
type of t6 = <class 'datetime.timedelta'>
As we can see, both t3
and t6
are of <class 'datetime.timedelta'>
type.
Python format datetime
The representation of date and time may be different in different countries, organizations, etc. In the US is more common to use mm/dd/yyyy
, whereas dd/mm/yyyy
is more common in France and UK.
Python offers strftime()
and strptime()
methods to hand this.
Python strftime() - datetime object to string
The strftime()
method is defined under classes date
, datetime
and time
. This method creates a formatted string from a given date
, datetime
or time
object.
Example: Format date using strftime()
from datetime import datetime
# current date and time
now = datetime.now()
t = now.strftime("%H:%M:%S")
print("time:", t)
# mm/dd/YY H:M:S format
d1 = now.strftime("%m/%d/%Y, %H:%M:%S")
print("d1:", d1)
# dd/mm/YY H:M:S format
d2 = now.strftime("%d/%m/%Y, %H:%M%S")
print("d2:", d2)
After running the above program, the output will be as follows:
time: 08:00:17
d1: 10/27/2017, 08:00:17
d2: 27/10/2017, 08:0017
Above, %Y
, %m
, %d
, %H
, %M
, %S
are format codes. The strftime()
method takes one or more format codes and returns a formatted string based on it.
Let us see the interval of every format codes:
%Y
- year [0001, ...., 2017,2018,...., 9999]%m
- month [01, 02, .., 11, 12]%d
- date [01, 02, .., 30, 31]%H
- hour [00, 01, .., 22, 23]%M
- minute [00, 01, ..., 58, 59]%S
- second [00, 01, .., 58, 59]
Python strptime() - string to datetime
The sprtime()
method creates a datetime
object from a given string representing date and time.
Example: strptime()
from datetime import datetime
date_str = "26 July, 2017"
print("date_str =", date_str)
date_obj = datetime.strptime(date_str, "%d %B, %Y")
print("date_obj =", date_obj)
After executing the above program, the output will be as follows:
date_str = 26 July, 2017
date_obj = 2017-07-26 00:00:00
The strptime()
method takes two arguments:
- a string representing date and time
- format code equivalent to the first argument
The format codes %d
, %B
and %Y
are used for day
, month
(full name) and year
, sequentially.
Handling timezone in Python
Let us assume, We are working on a project and need to display date and time based on their timezone. The best way to handle timezone is to use a third-party pytz module.
from datetime import datetime
import pytz
local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))
tz_NY = pytz.timezone("America/New_York")
datetime_NY = datetime.now(tz_NY)
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))
tz_Paris = pytz.timezone("Europe/France")
datetime_Paris = datetime.now(tz_Paris)
print("Paris:", datetime_Paris.strftime("%m/%d/%Y, %H:%M:%S"))
The output of the above program will be as follows:
Local: 10/27/2018, 08:38:12
NY: 10/27/2018, 04:38:12
Paris: 10/27/2018, 10:38:12
The above, datetime_NY
and datetime_Paris
are datetime objects containing the current date and time of their respective timezone.