English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá a manipular data e hora no Python através de exemplos.
Python tem um módulo chamadodatetimeO módulo, usado para manipular data e hora. Antes de aprofundarmos, vamos criar alguns programas simples relacionados a data e hora.
import datetime datetime_object = datetime.datetime.now() print(datetime_object)
Quando você executar o programa, a saída será semelhante a:
2020-04-13 17:09:49.015911
Aqui, usamos a declaração import datetime para importardatetimemódulo.
Uma classe definida no módulo datetime é a classe datetime. Em seguida, usamos o método now() para criar um objeto datetime que contém a data e hora locais atuais.
import datetime date_object = datetime.date.today() print(date_object)
Quando você executar o programa, a saída será semelhante a:
2020-04-13
Neste programa, usamos o método today() definido na classe date para obter um objeto data que contém a data local atual.
O que há dentro do datetime?
Podemos usardir()função para obter uma lista de todas as propriedades do módulo.
import datetime print(dir(datetime))
ao executar o programa, a saída será:
['MAXYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']
As classes mais usadas no módulo datetime são:
classe date
classe time
classe datetime
classe timedelta
Você pode instanciar um objeto data a partir da classe date. O objeto data representa a data (ano, mês e dia).
import datetime d = datetime.date(2019, 4, 13) print(d)
ao executar o programa, a saída será:
2019-04-13
Se você quiser saber, o date() do exemplo acima é o construtor da classe date. O construtor tem três parâmetros: ano, mês e dia.
variávelaé um objeto data.
Somente a classe date pode ser importada do módulo datetime. É assim:
from datetime import date a = date(2019, 4, 13) print(a)
Você pode usar um método de classe chamado today() para criar um objeto data que contém a data atual. O método é o seguinte:
from datetime import date today = date.today() print("Data atual =", today)
Também podemos criar um objeto data a partir de um timestamp. O timestamp Unix é a diferença em segundos entre uma data específica e o UTC1970 ano1mês1segundos entre os dias. Você pode usar o método fromtimestamp() para converter um timestamp em uma data.
from datetime import date timestamp = date.fromtimestamp(1576244364) print("日期 =", timestamp)
ao executar o programa, a saída será:
日期 = 2019-12-13
我们可以轻松地从日期对象获取年,月,日,星期几等。就是这样:
from datetime import date # 今天的日期对象 today = date.today() print("当前年:", today.year) print("当前月:", today.month) print("当前日:", today.day)
从time类示例化的时间对象表示本地时间。
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, minuto = 34, segundo = 56) print("c =", c) # time(hour, minute, second, microsecond) d = time(11, 34, 56, 234566) print("d =", d)
ao executar o programa, a saída será:
a = 00:00:00 b = 11:34:56 c = 11:34:56 d = 11:34:56.234566
创建time对象后,您可以轻松打印其属性,例如小时,分钟等。
from datetime import time a = time(11, 34, 56) print("小时=", a.hour) print("分钟=", a.minute) print("秒=", a.second) print("微秒=", a.microsecond)
运行示例时,输出将是:
小时= 11 分钟= 34 秒= 56 微秒= 0
注意,我们还没有传递微秒参数。因此,将打印其默认值0。
datetime模块有一个名为date的class类,可以包含来自dateetime对象的信息。
from datetime import datetime #datetime(year, month, day) a = datetime(2019, 11, 28) print(a) # datetime(year, month, day, hour, minute, second, microsecond) b = datetime(2019, 11, 28, 23, 55, 59, 342380) print(b)
ao executar o programa, a saída será:
2019-11-28 00:00:00 2019-11-28 23:55:59.342380
Os três primeiros parâmetros year, month e day do construtor datetime() são obrigatórios.
from datetime import datetime a = datetime(2019, 12, 28, 23, 55, 59, 342380) print("Ano =", a.year) print("Mês =", a.month) print("Dia =", a.day) print("Hora =", a.hour) print("Mês =", a.minute) print("Timestamp =", a.timestamp())
ao executar o programa, a saída será:
ano = 2019 mês = 12 dia = 28 hora = 23 mês = 55 Timestamp = 1577548559.34238
O objeto timedelta representa a diferença de tempo entre duas datas ou horários.
from datetime import datetime, date t1 = date(ano = 2018, mês = 7, dia = 12) t2 = date(ano = 2017, mês = 12, dia = 23) t3 = t1 - t2 print("t3 =", t3) t4 = datetime(ano = 2018, mês = 7, dia = 12, hora = 7, minuto = 9, segundo = 33) t5 = datetime(ano = 2019, mês = 6, dia = 10, hora = 5, minuto = 55, segundo = 13) t6 = t4 - t5 print("t6 =", t6) print("tipo de t3 =", tipo(t3)) print("tipo de t6 =", tipo(t6))
ao executar o programa, a saída será:
t3 = 201 dias, 0:00:00 t6 = -333 dias, 1:14:20 tipo de t3 = <class 'datetime.timedelta'> tipo de t6 = <class 'datetime.timedelta'>
Atenção,t3et6são do tipo <class 'datetime.timedelta'>.
from datetime import timedelta t1 = timedelta(semanas = 2, dias = 5, horas = 1, seconds = 33) t2 = timedelta(dias = 4, horas = 11, minutos = 4, seconds = 54) t3 = t1 - t2 print("t3 =", t3)
ao executar o programa, a saída será:
t3 = 14 dias, 13:55:39
Aqui, criamos dois objetos timedeltat1et2,a diferença direta em dias entre eles é impressa na tela.
from datetime import timedelta t1 = timedelta(segundos = 33) t2 = timedelta(segundos = 54) t3 = t1 - t2 print("t3 =", t3) print("t3 =", abs(t3))
ao executar o programa, a saída será:
t3 = -1 dia, 23:59:39 t3 = 0:00:21
Você pode usar o método total_seconds() para obter o número total de segundos em um objeto timedelta.
from datetime import timedelta t = timedelta(dias = 5, horas = 1, seconds = 33, microseconds = 233423) print("total seconds =", t.total_seconds())
ao executar o programa, a saída será:
total seconds = 435633.233423
您还可以使用+运算符找到两个日期和时间的总和。同样,您可以将timedelta对象乘以整数和浮点数。
日期和时间的表示方式在不同的地方,组织等中可能有所不同。在美国,使用mm / dd / yyyy更为常见,而在英国使用dd / mm / yyyy更为常见。
Python有strftime()和strptime()方法来处理这个问题。
strftime()方法是在date、datetime和time类下面定义的。该方法根据给定的日期、日期时间或时间对象创建格式化的字符串。
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 格式 print("s1: ", s1) s2 = now.strftime("%d/%m/%Y, %H:%M:%S # dd/mm/YY H:M:S 格式 print("s2: ", s2)
Quando você executar o programa, a saída será semelhante a:
time: 04:34:52 s1: 12/26/2018, 04:34:52 s2: 26/12/2018, 04:34:52
这里%Y,%m,%d,%H等都是格式代码。strftime()方法采用一个或多个格式代码,并根据该代码返回格式化的字符串。
在上面的程序中,t,s1es2是字符串。
%Y -年[0001,...,2018,2019,...,9999]
%m -月[01,02,...,11,12]
%d -天[01,02,...,30,31]
%H -小时[00,01,...,22,23
%M -分钟[00,01,...,58,59]
%S -秒[00,01,...,58,59]
要了解有关strftime()代码并设置其格式的更多信息,请访问:strftime() do Python。
strptime()方法从一个给定的字符串(表示日期和时间)创建一个datetime对象。
from datetime import datetime date_string = "21 Junho, 2018" print("date_string =", date_string) date_object = datetime.strptime(date_string, "%d %B, %Y") print("date_object =", date_object)
ao executar o programa, a saída será:
date_string = 21 Junho, 2018 date_object = 2018-06-21 00:00:00
Os métodos strptime() têm dois parâmetros:
representando a string de data e hora
igual ao código de formato do primeiro parâmetro
A propósito, os códigos de formato %d, %B e %Y são usados respectivamente para dia, mês (completo) e ano.
visitestrptime() do Pythonpara obter mais informações.
Suponha que você esteja trabalhando em um projeto que precise exibir a data e hora com base no fuso horário do projeto. Recomendamos que você use um módulo de terceirosmódulo pytzem vez de lidar com os fusos horários por conta própria.
from datetime import datetime import pytz local = datetime.now() print("Local:", local.strftime("%m",/%d/"%Y, %H:%M:%S") tz_NY = pytz.timezone('América',/Nova_York') datetime_NY = datetime.now(tz_NY) print("NY:", datetime_NY.strftime("%m",/%d/"%Y, %H:%M:%S") tz_London = pytz.timezone('Europa',/Londres') datetime_London = datetime.now(tz_London) print("Londres:", datetime_London.strftime("%m",/%d/"%Y, %H:%M:%S")
Quando você executar o programa, a saída será semelhante a:
Horário local: 2018-12-20 13:10:44.260462 América/Horário de Nova York: 2018-12-20 13:10:44.260462 Europa/Horário de Londres: 2018-12-20 13:10:44.260462
Aqui,datetime_NYedatetime_LondonÉ um objeto datetime que contém a data e hora atuais com seus respectivos fusos horários.