Lấy ngày trong tuần hoặc tháng từ một ngày bằng Python dưới dạng chuỗi (ví dụ: tiếng Đức hoặc tiếng Anh)

Kinh doanh

Sử dụng datetime thư viện tiêu chuẩn của Python, bạn có thể tạo một đối tượng datetime từ một chuỗi ngày tháng và lấy tên của ngày trong tuần hoặc tháng từ nó dưới dạng một chuỗi. Tuy nhiên, ngôn ngữ của các chuỗi đó phụ thuộc vào ngôn ngữ (cài đặt quốc gia hoặc khu vực) của môi trường.

Dưới đây là hai cách để lấy tên của ngày trong tuần hoặc tháng từ ngày dưới dạng chuỗi bằng bất kỳ ngôn ngữ nào.

  • Thay đổi ngôn ngữ bằng mô-đun ngôn ngữ
  • Xác định một chức năng mới

Để biết thêm thông tin về cách sử dụng cơ bản của mô-đun datetime và các phương thức strptime () và strftime () để chuyển đổi giữa ngày và giờ (ngày, giờ) và chuỗi, vui lòng tham khảo các bài viết sau.

Thay đổi ngôn ngữ với mô-đun ngôn ngữ

Thư viện chuẩn Python cung cấp một mô-đun ngôn ngữ để kiểm soát cài đặt ngôn ngữ.

Nó phụ thuộc vào môi trường, nhưng trong môi trường ví dụ, bằng cách sử dụng mã định dạng sau trong phương thức strftime (), tên của các ngày trong tuần và tháng có thể được ký hiệu bằng tiếng Anh.
%A,%a,%B,%b

Ví dụ sau sử dụng đối tượng datetime để biểu thị ngày và giờ (date and time), nhưng điều này cũng đúng với đối tượng date chỉ có thông tin ngày tháng.

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, cài đặt danh mục ngôn ngữ cho định dạng thời gian, được chọn với locale.getlocale () và nó được đặt thành Không. Kết quả này phụ thuộc vào môi trường.

print(locale.getlocale(locale.LC_TIME))
# (None, None)

LC_TIME sang tiếng Nhật (UTF-8) ja_JP.UTF-8 trong locale.setlocale () để nhận tên ngày và tháng bằng tiếng Nhật. locale.LC_ALL có thể được sử dụng để đặt tất cả các danh mục ngôn ngữ, nhưng lưu ý rằng điều này sẽ ảnh hưởng, ví dụ như LC_MONETARY chẳng hạn.

Lưu ý rằng những thay đổi này chỉ có hiệu lực trong mã này. Nó không có nghĩa là các biến môi trường hệ thống sẽ được viết lại.

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

Bạn cũng có thể thay đổi cài đặt ngôn ngữ để sử dụng các ký hiệu ngôn ngữ khác, chẳng hạn như tiếng Anh hoặc tiếng Đức.

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

Nếu bạn muốn lấy ngày trong tuần cho một ngày nhất định từ một chuỗi ngày bằng bất kỳ ngôn ngữ nào, bạn có thể làm như vậy bằng cách làm theo các bước bên dưới.

  • LC_TIME đến giá trị của cài đặt ngôn ngữ mong muốn (ví dụ: ja_JP.UTF-8) trong locale.setlocale ()
  • Chuyển đổi một chuỗi thành một đối tượng datetime với strptime ()
  • Gọi strftime () trên đối tượng datetime đó với mã định dạng sau:%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)
# 月曜日

Xác định một chức năng mới

Điều này có thể đạt được bằng cách xác định một chức năng mới.

Phương thức weekday () của đối tượng datetime cho giá trị nguyên là 0 cho Thứ Hai và 6 cho Chủ nhật.

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'>

Có một phương thức tương tự, isoweekday (), trả về giá trị số nguyên là 1 cho Thứ Hai và 7 cho Chủ Nhật. Lưu ý rằng có một sự khác biệt nhỏ.

print(dt.isoweekday())
# 1

print(type(dt.isoweekday()))
# <class 'int'>

Nếu chúng ta xác định danh sách tên các ngày trong tuần cho mỗi chuỗi ngôn ngữ và truy xuất chúng bằng cách sử dụng các giá trị nguyên thu được bằng phương thức weekday (), chúng ta có thể đạt được mục tiêu của mình.

Copied title and URL