Usando a biblioteca estándar datetime de Python, pode crear un obxecto de data e hora a partir dunha cadea de data e obter o nome do día da semana ou do mes como unha cadea. Non obstante, o idioma desas cadeas depende da configuración rexional (país ou rexión) do contorno.
Aquí tes dúas formas de obter o nome do día da semana ou do mes a partir dunha data como cadea en calquera idioma.
- Cambia a configuración rexional co módulo de configuración rexional
- Definir unha nova función
Para obter máis información sobre o uso básico do módulo datetime e os métodos strptime() e strftime() para converter entre data e hora (data, hora) e cadeas, consulte os seguintes artigos.
- Artigos relacionados:Converter datas e horas a e dende cadeas co datatime de Python(
strftime
,strptime
)
Cambiar a localización co módulo de localización
A biblioteca estándar de Python ofrece un módulo de configuración rexional para controlar a configuración rexional.
Depende do entorno, pero no entorno de exemplo, utilizando o seguinte código de formato no método strftime(), pódense obter os nomes dos días da semana e dos meses en notación inglesa.%A
,%a
,%B
,%b
O seguinte exemplo usa un obxecto de data e hora para representar a data e a hora (data e hora), pero o mesmo ocorre con un obxecto de data que só ten información sobre a data.
import datetime
import locale
dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan
LC_TIME, a configuración da categoría local para o formato da hora, compróbase con locale.getlocale() e establécese en None. Este resultado depende do medio ambiente.
print(locale.getlocale(locale.LC_TIME))
# (None, None)
LC_TIME ao xaponés (UTF-8) ja_JP.UTF-8 en locale.setlocale() para obter os nomes dos días e dos meses en xaponés. locale.LC_ALL pódese usar para definir todas as categorías locais, pero teña en conta que isto afectará, por exemplo, a LC_MONETARY.
Teña en conta que estes cambios só son efectivos neste código. Non significa que as variables de ambiente do sistema sexan reescritas.
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
print(locale.getlocale(locale.LC_TIME))
# ('ja_JP', 'UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# 月曜日, 月, 1月, 1
Tamén pode cambiar a configuración rexional para utilizar outras notacións de idioma, como inglés ou alemán.
locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Monday, Mon, January, Jan
locale.setlocale(locale.LC_TIME, 'de_DE.UTF-8')
print(dt.strftime('%A, %a, %B, %b'))
# Montag, Mo, Januar, Jan
Se queres obter o día da semana dunha data determinada a partir dunha cadea de datas en calquera idioma, podes facelo seguindo os pasos seguintes.
- LC_TIME ao valor da configuración de idioma desexada (por exemplo, ja_JP.UTF-8) en locale.setlocale()
- Converter unha cadea nun obxecto de data e hora con strptime()
- Chame a strftime() nese obxecto de data e hora co seguinte código de formato:
%A
,%a
,%B
,%b
locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
s = '2018-01-01'
s_dow = datetime.datetime.strptime(s, '%Y-%m-%d').strftime('%A')
print(s_dow)
# 月曜日
Definir unha nova función
Isto pódese conseguir definindo unha nova función.
O método weekday() do obxecto datetime dá un valor enteiro de 0 para o luns e 6 para o domingo.
import datetime
dt = datetime.datetime(2018, 1, 1)
print(dt)
# 2018-01-01 00:00:00
print(dt.weekday())
# 0
print(type(dt.weekday()))
# <class 'int'>
Hai un método similar, isoweekday(), que devolve un valor enteiro de 1 para o luns e 7 para o domingo. Teña en conta que hai unha diferenza sutil.
print(dt.isoweekday())
# 1
print(type(dt.isoweekday()))
# <class 'int'>
Se definimos unha lista de nomes dos días da semana para cada cadea de linguaxe e os recuperamos utilizando os valores enteiros obtidos polo método weekday(), podemos acadar o noso obxectivo.