In questo articolo imparerai a manipolare la data e l'ora in Python con l'aiuto di esempi.
Python ha un modulo chiamato datetime per lavorare con date e ore. Creiamo alcuni semplici programmi relativi a data e ora prima di scavare più a fondo.
Esempio 1: ottieni data e ora correnti
import datetime datetime_object = datetime.datetime.now() print(datetime_object)
Quando esegui il programma, l'output sarà qualcosa del tipo:
19-12-2018 09: 26: 03.478039
Qui, abbiamo importato il modulo datetime usando l' import datetime
istruzione.
Una delle classi definite nel datetime
modulo è datetime
class. Abbiamo quindi utilizzato il now()
metodo per creare un datetime
oggetto contenente la data e l'ora locali correnti.
Esempio 2: ottieni la data corrente
import datetime date_object = datetime.date.today() print(date_object)
Quando esegui il programma, l'output sarà qualcosa del tipo:
19-12-2018
In questo programma, abbiamo utilizzato il today()
metodo definito nella date
classe per ottenere un date
oggetto contenente la data locale corrente.
Cosa c'è dentro datetime?
Possiamo usare la funzione dir () per ottenere un elenco contenente tutti gli attributi di un modulo.
import datetime print(dir(datetime))
Quando esegui il programma, l'output sarà:
('MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', ' datetime "," datetime_CAPI "," time "," timedelta "," timezone "," tzinfo ")
Le classi comunemente usate nel modulo datetime sono:
- data Classe
- classe di tempo
- datetime Class
- timedelta Class
datetime.date Classe
Puoi istanziare date
oggetti dalla date
classe. Un oggetto data rappresenta una data (anno, mese e giorno).
Esempio 3: oggetto Date per rappresentare una data
import datetime d = datetime.date(2019, 4, 13) print(d)
Quando esegui il programma, l'output sarà:
2019-04-13
Se ti stai chiedendo, date()
nell'esempio sopra è un costruttore della date
classe. Il costruttore accetta tre argomenti: anno, mese e giorno.
La variabile a è un date
oggetto.
Possiamo solo importare la date
classe dal datetime
modulo. Ecco come:
from datetime import date a = date(2019, 4, 13) print(a)
Esempio 4: ottieni la data corrente
È possibile creare un date
oggetto contenente la data corrente utilizzando un metodo di classe denominato today()
. Ecco come:
from datetime import date today = date.today() print("Current date =", today)
Esempio 5: ottieni la data da un timestamp
Possiamo anche creare date
oggetti da un timestamp. Un timestamp Unix è il numero di secondi tra una data particolare e il 1 gennaio 1970 all'ora UTC. È possibile convertire un timestamp alla data utilizzando il fromtimestamp()
metodo.
from datetime import date timestamp = date.fromtimestamp(1326244364) print("Date =", timestamp)
Quando esegui il programma, l'output sarà:
Data = 2012-01-11
Esempio 6: stampare l'anno, il mese e il giorno di oggi
Possiamo ottenere facilmente anno, mese, giorno, giorno della settimana ecc. Dall'oggetto data. Ecco come:
from datetime import date # date object of today's date today = date.today() print("Current year:", today.year) print("Current month:", today.month) print("Current day:", today.day)
datetime.time
Un oggetto ora istanziato dalla time
classe rappresenta l'ora locale.
Esempio 7: oggetto Time per rappresentare il tempo
from datetime import time # time(hour = 0, minute = 0, second = 0) a = time() print("a =", a) # time(hour, minute and second) b = time(11, 34, 56) print("b =", b) # time(hour, minute and second) c = time(hour = 11, minute = 34, second = 56) print("c =", c) # time(hour, minute, second, microsecond) d = time(11, 34, 56, 234566) print("d =", d)
Quando esegui il programma, l'output sarà:
a = 00:00:00 b = 11:34:56 c = 11:34:56 d = 11:34: 56.234566
Esempio 8: stampa ora, minuto, secondo e microsecondo
Una volta creato un time
oggetto, puoi facilmente stampare i suoi attributi come ora, minuto ecc.
from datetime import time a = time(11, 34, 56) print("hour =", a.hour) print("minute =", a.minute) print("second =", a.second) print("microsecond =", a.microsecond)
Quando esegui l'esempio, l'output sarà:
ora = 11 minuti = 34 secondi = 56 microsecondi = 0
Notare che non abbiamo passato l'argomento del microsecondo. Quindi, 0
viene stampato il suo valore predefinito .
datetime.datetime
The datetime
module has a class named dateclass
that can contain information from both date and time objects.
Example 9: Python datetime object
from datetime import datetime #datetime(year, month, day) a = datetime(2018, 11, 28) print(a) # datetime(year, month, day, hour, minute, second, microsecond) b = datetime(2017, 11, 28, 23, 55, 59, 342380) print(b)
When you run the program, the output will be:
2018-11-28 00:00:00 2017-11-28 23:55:59.342380
The first three arguments year, month and day in the datetime()
constructor are mandatory.
Example 10: Print year, month, hour, minute and timestamp
from datetime import datetime a = datetime(2017, 11, 28, 23, 55, 59, 342380) print("year =", a.year) print("month =", a.month) print("hour =", a.hour) print("minute =", a.minute) print("timestamp =", a.timestamp())
When you run the program, the output will be:
year = 2017 month = 11 day = 28 hour = 23 minute = 55 timestamp = 1511913359.34238
datetime.timedelta
A timedelta
object represents the difference between two dates or times.
Example 11: Difference between two dates and times
from datetime import datetime, date t1 = date(year = 2018, month = 7, day = 12) t2 = date(year = 2017, month = 12, day = 23) t3 = t1 - t2 print("t3 =", t3) t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33) t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13) t6 = t4 - t5 print("t6 =", t6) print("type of t3 =", type(t3)) print("type of t6 =", type(t6))
When you run the program, the output will be:
t3 = 201 days, 0:00:00 t6 = -333 days, 1:14:20 type of t3 = type of t6 =
Notice, both t3 and t6 are of type.
Example 12: Difference between two timedelta objects
from datetime import timedelta t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33) t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54) t3 = t1 - t2 print("t3 =", t3)
When you run the program, the output will be:
t3 = 14 days, 13:55:39
Here, we have created two timedelta
objects t1 and t2, and their difference is printed on the screen.
Example 13: Printing negative timedelta object
from datetime import timedelta t1 = timedelta(seconds = 33) t2 = timedelta(seconds = 54) t3 = t1 - t2 print("t3 =", t3) print("t3 =", abs(t3))
When you run the program, the output will be:
t3 = -1 day, 23:59:39 t3 = 0:00:21
Example 14: Time duration in seconds
You can get the total number of seconds in a timedelta object using total_seconds()
method.
from datetime import timedelta t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423) print("total seconds =", t.total_seconds())
When you run the program, the output will be:
total seconds = 435633.233423
You can also find sum of two dates and times using +
operator. Also, you can multiply and divide a timedelta
object by integers and floats.
Python format datetime
The way date and time is represented may be different in different places, organizations etc. It's more common to use mm/dd/yyyy
in the US, whereas dd/mm/yyyy
is more common in the UK.
Python has strftime()
and strptime()
methods to handle this.
Python strftime() - datetime object to string
The strftime()
method is defined under classes date
, datetime
and time
. The method creates a formatted string from a given date
, datetime
or time
object.
Example 15: Format date using strftime()
from datetime import datetime # current date and time now = datetime.now() t = now.strftime("%H:%M:%S") print("time:", t) s1 = now.strftime("%m/%d/%Y, %H:%M:%S") # mm/dd/YY H:M:S format print("s1:", s1) s2 = now.strftime("%d/%m/%Y, %H:%M:%S") # dd/mm/YY H:M:S format print("s2:", s2)
When you run the program, the output will be something like:
time: 04:34:52 s1: 12/26/2018, 04:34:52 s2: 26/12/2018, 04:34:52
Here, %Y
, %m
, %d
, %H
etc. are format codes. The strftime()
method takes one or more format codes and returns a formatted string based on it.
In the above program, t, s1 and s2 are strings.
%Y
- year (0001,… , 2018, 2019,… , 9999)%m
- month (01, 02,… , 11, 12)%d
- day (01, 02,… , 30, 31)%H
- hour (00, 01,… , 22, 23%M
- minute (00, 01,… , 58, 59)%S
- second (00, 01,… , 58, 59)
To learn more about strftime()
and format codes, visit: Python strftime().
Python strptime() - string to datetime
The strptime()
method creates a datetime
object from a given string (representing date and time).
Example 16: strptime()
from datetime import datetime date_string = "21 June, 2018" print("date_string =", date_string) date_object = datetime.strptime(date_string, "%d %B, %Y") print("date_object =", date_object)
When you run the program, the output will be:
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
The strptime()
method takes two arguments:
- una stringa che rappresenta la data e l'ora
- codice di formato equivalente al primo argomento
Tra l'altro, %d
, %B
e %Y
codici di formato sono utilizzati per giorno, mese (nome completo) e l'anno, rispettivamente.
Visita Python strptime () per saperne di più.
Gestione del fuso orario in Python
Supponi di lavorare a un progetto e di dover visualizzare la data e l'ora in base al loro fuso orario. Piuttosto che provare a gestire da soli il fuso orario, ti consigliamo di utilizzare un modulo pytZ di terze parti.
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_London = pytz.timezone('Europe/London') datetime_London = datetime.now(tz_London) print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))
Quando esegui il programma, l'output sarà qualcosa del tipo:
Ora locale: 2018-12-20 13: 10: 44.260462 America / New_York time: 2018-12-20 13: 10: 44.260462 Europa / London time: 2018-12-20 13: 10: 44.260462
Qui, datetime_NY e datetime_London sono oggetti datetime contenenti la data e l'ora correnti del rispettivo fuso orario.