Gần đây mình đang làm nhiều việc với kiểu dữ liệu Datetime trong Python. Vấn đề mình gặp phải là xử lý nhiều loại định dạng thời gian khác nhau, chuyển hóa thành định dạng Ngày giờ, chuẩn hóa thời gian lưu trữ và lưu vào cơ sở dữ liệu. Và sau đây, mình sẽ viết bài chia sẻ về cách mình xử lý kiểu dữ liệu Datetime trong Python. Trong bài mình sẽ sử dụng Python 3 để xử lý kiểu dữ liệu Datetime
Mẹo 1. Khoảng thời gian sử dụng chuẩn hóa
Đầu tiên, cũng là quan trọng nhất, tiêu chuẩn hóa múi giờ sử dụng để chuyển đổi các kiểu thời gian. Mình lựa chọn sử dụng múi giờ chuẩn UTC để chuẩn hóa thời gian cho cả hệ thống cũng như làm múi giờ chuẩn để xử lý các loại định dạng thời gian khác nhau
Tham khảo thêm về thời gian UTC tại
Xử lý bằng hàm parse
import datetime
import pytz
from dateutil.parser import parse
# Dạng string time
date_string = '2019-03-20T03:41:16Z'
# Dạng datetime format
date_time_python = parse[date_string]
Xử lý bằng strptime
import datetime
import pytz
from dateutil.parser import parse
# Dạng string time
date_string = '2019-03-21 03:41:16'
# Strptime
format = '%Y-%m-%d %H:%M:%S'
date_time_python = datetime.datetime.strptime[date_string, format]
Lưu ý
- Rất nhiều định dạng thời gian khác nhau nên để có thể chuyển từ chuỗi thành Datetime
parse
chỉ có thể xử lý một số định dạng tiêu chuẩn, nếu định dạng tiêu chuẩn khác phải hiểu cấu trúc chuỗi thời gian để sử dụng hàmstrp
để cắt chuỗi tạo Datetime - Nếu kiểu dữ liệu Datetime không xác định được múi giờ thì được gọi là
0import datetime import pytz from dateutil.parser import parse # Dạng string time date_string = '2019-03-21 03:41:16' # Strptime format = '%Y-%m-%d %H:%M:%S' date_time_python = datetime.datetime.strptime[date_string, format]
Dấu thời gian là kiểu thời gian thông tin ứng dụng của hệ thống thông tin Unix, tìm hiểu thêm tại
import datetime
# Dạng datetime
date_time_now = datetime.datetime.now[]
# Dạng timestamp
timestamp_now = date_time_now.timestamp[]
Kiểm tra loại múi giờ
import datetime
import pytz
# Dạng native date
date_time_now = datetime.datetime.now[]
print[date_time_now.tzname[]]
# Dạng utc
UTC = pytz.utc
date_time_utc_now = UTC.localize[date_time_now]
print[date_time_utc_now.tzname[]]
Lưu ý. không sử dụng hàm thay thế, hàm thay thế sẽ chỉ thay đổi tzinfo không quy định thời gian từ múi giờ này sang múi giờ khác
Nếu bạn đang ở múi giờ Việt Nam [GMT+7], tức nếu hiện tại là 8 giờ sáng [giờ Việt Nam] thì quy ra giờ UTC tức 1 giờ sáng [giờ UTC]. Vì vậy nếu Datetime đang ở múi giờ UTC thì ta phải convert nó sáng giờ Việt Nam
import datetime
import pytz
# Dạng native date
date_time_now = datetime.datetime.now[]
print[date_time_now.tzname[]]
# Dạng utc
UTC = pytz.utc
date_time_utc_now = UTC.localize[date_time_now]
print[date_time_utc_now.tzname[]]
# Dạng 'Asia/Ho_Chi_Minh'
VN_TZ = pytz.timezone['Asia/Ho_Chi_Minh']
date_time_vntz_now = date_time_utc_now.astimezone[VN_TZ]
print[date_time_vntz_now.tzname[]]
import datetime
date_time_now = datetime.datetime.now[]
timestamp_now = date_time_now.timestamp[]
# Convert timestamp thành dạng Datetime
timestamp_to_datetime = datetime.datetime.fromtimestamp[timestamp_now]
ISO 8601 là tiêu chuẩn quốc tế, được đưa ra bởi Tổ chức tiêu chuẩn hóa quốc tế [ISO] lần đầu tiên vào năm 1988, mô tả quy định viết ngày tháng và thời gian theo cách đơn giản nhất mà máy tính có thể hiểu được. . Còn đối với Python ISO 8601 Datetime is string format time information information
Dấu thời gian Unix là một số nguyên được ký duy nhất tăng lên một giây mỗi giây, cho phép máy tính lưu trữ và thao tác với các hệ thống ngày tháng thông thường. Phần mềm này sau đó được dịch sang định dạng mà con người có thể đọc được. Dấu thời gian Unix là số giây được tính kể từ ngày 1 tháng 1 năm 1970. Trong bài viết này, chúng ta sẽ xem cách chuyển đổi DateTime sang dấu thời gian Unix
DateTime thành dấu thời gian Unix
Để chuyển đổi Python DateTime thành dấu thời gian Unix, chúng tôi đã nhập một mô-đun có tên là datetime và time trong ví dụ này và biến date_time đã được khai báo và gán datetime. thời gian/ngày [2021, 7, 26, 21, 20]. Năm là 2021, tháng là 7, ngày là 26, giờ là 21 và phút là 20
Mã số
Python3
# importing datetime module
import
datetime
import
1628497724509.2931
1628497724509.2932
1628497724509.2933_______7_______4
1628497724509.2935
1628497724509.2936
1628497724509.2937
1628497724509.2938
1628497724509.2937
16284977830
1628497724509.2937
16284977832
1628497724509.2937
16284977834
16284977835
16284977836
16284977837
16284977838
16284977839
1628497823000.00
1628497823000.01
16284977837
16284977838
1628497823000.04
1628497724509.2937
1628497823000.06
1628497823000.07
đầu ra
date_time => 2021-07-26 21:20:00 unix_timestamp => 1627314600.0
Giải trình
Các lớp thao tác ngày và giờ được cung cấp bởi mô-đun datetime. Hàm nghịch đảo của giờ địa phương là mktime[]. Nó chấp nhận một thời gian cấu trúc hoặc một bộ 9 đầy đủ làm đối số và trả về một số dấu phẩy động để tương thích với thời gian []. Nó cũng được sử dụng để chuyển đổi ngày giờ thành dấu thời gian Unix
Phương thức timetuple[] của datetime. đối tượng ngày trả về một đối tượng thời gian. thời gian cấu trúc. Đối tượng thời gian cấu trúc là một bộ dữ liệu được đặt tên có thể được truy xuất bằng chỉ mục hoặc theo tên. Các trường năm, tháng và ngày của bộ dữ liệu được đặt tên được trả về bởi hàm timetuple[] sẽ được đặt theo đối tượng ngày, trong khi các trường giờ, phút và giây sẽ được đặt thành 0
DateTime thành dấu thời gian Unix với 13 chữ số
Để có được thời gian hiện tại, hãy sử dụng datetime. Hiện nay[]. Hàm timetuple[] của lớp datetime trả về các thuộc tính của datetime dưới dạng một bộ có tên. Dấu thời gian có 13 chữ số phải được nhân với 1000
Mã số
Python3
import
1628497724509.2931
import
datetime
Unix_Time: 1628188200.02______7_______4
Unix_Time: 1628188200.04
Unix_Time: 1628188200.05
1628497724509.2934
Unix_Time: 1628188200.07
Unix_Time: 1628188200.08
Unix_Time: 1628188200.09
16284977837
1628209448.01
đầu ra
1628497724509.293
DateTime đến dấu thời gian Unix trong múi giờ UTC
Mô-đun lịch cung cấp các chức năng liên quan đến lịch hữu ích. utc. hàm now trả về thời gian hiện tại theo múi giờ UTC. Trong mô-đun thời gian, hàm timegm trả về dấu thời gian Unix. Hàm timetuple[] của lớp datetime trả về các thuộc tính của datetime dưới dạng một bộ có tên. Để lấy dấu thời gian Unix, hãy sử dụng print[UTC]
Mã số
Python3
import
1628209448.03
import
datetime
1628209448.06
1628497724509.2934
1628209448.08
1628209448.09
1628497724509.2934
Unix_Time => 1627334400 Date & Time => 2021-07-27 02:50:001
16284977837
Unix_Time => 1627334400 Date & Time => 2021-07-27 02:50:003
đầu ra
1628497783
DateTime thành dấu thời gian Unix mili giây
ngày giờ. Hàm now[] được sử dụng để lấy thời gian hiện tại. Phương thức mktime là một phương thức thời gian là hàm nghịch đảo của giờ địa phương; . Hàm timetuple[] của lớp datetime trả về các thuộc tính của datetime dưới dạng một bộ có tên. Để có được thời gian tính bằng mili giây, hãy nhân nó với 1000
Mã số
Python3
import
datetime
import
1628497724509.2931
Unix_Time => 1627334400 Date & Time => 2021-07-27 02:50:008
1628497724509.2934
Unix_Time: 1628188200.04
16284977837
# importing datetime module
2Unix_Time: 1628188200.08
Unix_Time: 1628188200.09
16284977835
đầu ra
1628497823000.0
Ngày giờ. ngày thành dấu thời gian Unix
thời gian. date[] là một hàm chỉ chấp nhận ngày tháng. Trong trường hợp này, 2021 là năm, 8 là tháng và 6 là ngày. mktime[] là một phương thức thời gian là hàm nghịch đảo của giờ địa phương;
Mã số
Python3
import
datetime
import
1628497724509.2931
import
0
1628497724509.2934
import
21628497724509.2936
1628497724509.2937
import
51628497724509.2937
import
716284977835
16284977837
16284977838
datetime
11628497724509.2937
1628497823000.06
datetime
4đầu ra
Unix_Time: 1628188200.0
Chuỗi DateTime thành dấu thời gian Unix
Ngày và giờ được cung cấp ở định dạng chuỗi trong trường hợp này. Ở đây, 8 biểu thị tháng, 6 biểu thị ngày, 2021 biểu thị năm, 05 biểu thị giờ, 54 biểu thị phút và 8 biểu thị giây. strptime[] là một phương thức mô-đun datetime được sử dụng để chuyển đổi các chuỗi thành các đối tượng datetime và time. Hàm timestamp[] trả về thời gian hiện tại ở vị trí hiện tại
Mã số
Python3
import
datetime
datetime
7
1628497724509.2934
datetime
91628497724509.29300
1628497724509.2934
1628497724509.29302
1628497724509.29303_______7_______04
16284977835
1628497724509.29306
1628497724509.2934
1628497724509.29308
16284977837
1628497724509.29310
đầu ra
1628209448.0
Dấu thời gian Unix thành Python DateTime
Mô-đun DateTime trong Python được sử dụng để xử lý các vấn đề liên quan đến ngày và giờ trong Python. Phương thức fromtimestamp[] là một trong những hàm có trong mô-đun này. Hàm fromtimestamp[] của lớp ngày tính toán và trả về ngày tương ứng với dấu thời gian đã chỉ định. Phạm vi dấu thời gian được phép kéo dài từ 1970 đến 2038. Nếu có bất kỳ giây nhuận nào trong dấu thời gian, hàm fromtimestamp[] sẽ bỏ qua chúng
Để bắt đầu, chúng tôi nhập lớp datetime từ mô-đun datetime. Đối tượng giá trị UNIX sau đó được lưu trữ trong một biến. Sau đó, chúng tôi sử dụng datetime. phương thức fromtimestamp[] để truy xuất thời gian và ngày tháng.
Hàm strftime[] là một hàm khác trong mô-đun datetime. Hàm này hỗ trợ trả lại DateTime ở một định dạng cụ thể. Hàm này được sử dụng để chuyển đổi các đối tượng ngày và giờ thành biểu diễn chuỗi. Các mã định dạng trong đoạn mã trên là %d, %m, %Y, %H, %M và %S, tương ứng cho biết ngày, tháng, năm, giờ, phút và giây