Time, Date, Timestamp in Python
External
Internal
Overview
The Standard Library datetime
module provides datetime
, date
and time
types. The datetime
type combines information stored in data
and time
and it is the most commonly used. Additionally, the dateutil
module provides useful extensions.
datetime Module
datetime Overview
The datetime
module provides classes for manipulating dates and times. The datetime
package documentation seems to recommend the dateutil
for time zone support and parsing.
The datetime.datetime Type
datetime
is an immutable type, so methods that seem to modify an instance actually return new instances. Given a datetime
instances, the equivalent date
and time
type instances can be obtained with date()
, respectively time()
.
Time Interval with timedelta
The difference of two datetime
objects produce a datetime.timedelta
type:
from datetime import datetime
dt1 = datetime(2022,3,27,13,10,45,46000)
dt2 = datetime(2022,6,30,14,28)
tdelta = dt2 - dt1
print(tdelta)
print(type(tdelta))
print(dt1.day) # prints 27
print(dt1.minute) # prints 10
To get the total number of seconds in timedelta
, use total_seconds()
:
from datetime import datetime
t0 = datetime.now()
...
t1 = datetime.now()
print((t1 - t0).total_seconds())
now Time
from datetime import datetime
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print("Current Time =", current_time)
Current Date
With now()
:
from datetime import datetime
d = datetime.now().strftime("%Y-%m-%d")
print(d) # displays YYYY-mm-dd
With date.today()
:
from datetime import date
print(str(date.today())) # displays YYYY-mm-dd
Format
Parsing from String
from datetime import datetime
s = '12/31/2023'
d = datetime.strptime(s, "%m/%d/%Y")
assert d.year == 2023
assert d.month == 12
assert d.day == 31
The common timestamp elements are '%Y-%m-%d %H:%M:%S'.
ISO C89 compatible format specifications:
Type | Description |
---|---|
%Y | Four-digit year |
%y | Two-digit year |
%m | Two-digit month [01, 12] |
%d | Two-digit day [01, 31] |
%H | Hour (24-hour clock) [00, 23] |
%I | Hour (12-hour clock) [01, 12] |
%M | Two-digit minute [00, 59] |
%S | Second [00, 61] (seconds 60, 61 account for leap seconds) |
%f | Microsecond as an integer, zero-padded (from 000000 to 999999) |
%j | Day of the year as a zero-padded integer (from 001 to 336) |
%w | Weekday as an integer [0 (Sunday), 6] |
%u | Weekday as an integer starting from 1, where 1 is Monday. |
%U | Week number of the year [00, 53]; Sunday is considered the first day of the week, and days before the first Sunday of the year are “week 0” |
%W | Week number of the year [00, 53]; Monday is considered the first day of the week, and days before the first Monday of the year are “week 0” |
%z | UTC time zone offset as +HHMM or -HHMM; empty if time zone naive |
%Z | Time zone name as a string, or empty string if no time zone |
%F | Shortcut for %Y-%m-%d (e.g., 2012-4-18) |
%D | Shortcut for %m/%d/%y (e.g., 04/18/12) |
Also see Time, Date and Timestamp Parsing with dateutil below.
Formating as String
d = ...
d.strftime("%Y-%m-%d %H:%M")
Replace Time Fields
dt_hour = dt.replace(minute=0, second=0)
Since datetime
is immutable, new instances will be generated.
dateutil Module
Time, Date and Timestamp Parsing with dateutil
The datetime
package documentation seems to recommend the dateutil
for time zone support and parsing.
import dateutil.parser as du
d = du.parse('10/01/2023')
assert d.year == 2023
assert d.month == 10
assert d.day == 1
time Module
Sleep
from time import sleep
sleep(1)