Tổng quan
Gần đây mình có làm việc nhiều 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 time format khác nhau, chuyển hóa thành dạng Datetime, chuẩn hóa thời gian lưu trữ và lưu vào database. 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.
Nội dung chính
- Tổng quan
- Tips 1: Chuẩn hóa múi giờ sử dụng
- Tips 2: Convert String thành Datetime
- Tips 3: Chuyển hóa kiểu Datetime sang Timestamp Python
- Tips 4: Chuyển hóa kiểu native date sang UTC timezone
- Tips 5: Convert UTC sang timezone khác
- Tips 6: Chuyên từ Timestamp sang Datetime
- Tips 7: Convert Datetime sang ISO 8601
- Example 1: datetime to string using strftime[]
- How strftime[] works?
- Example 2: Creating string from a timestamp
- Format Code List
- Example 3: Locale's appropriate date and time
- How do I change date format from YYYY MM DD in Python?
- How do you change a date format from a string in Python?
- How do I convert datetime to date format?
- How do I change the date format from YYYY MM DD in pandas?
Tips 1: Chuẩn hóa múi giờ sử dụng
Tips 2: Convert String thành Datetime
Tips 3: Chuyển hóa kiểu Datetime sang Timestamp Python
Tips 2: Convert String thành Datetime
Tips 3: Chuyển hóa kiểu Datetime sang Timestamp Python
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]
Tips 4: Chuyển hóa kiểu native date sang UTC timezone
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]
Tips 5: Convert UTC sang timezone khác
- Tips 6: Chuyên từ Timestamp sang Datetime
- Tips 7: Convert Datetime sang ISO 8601
Tips 3: Chuyển hóa kiểu Datetime sang Timestamp Python
Tips 4: Chuyển hóa kiểu native date sang UTC timezone
import datetime
# Dạng datetime
date_time_now = datetime.datetime.now[]
# Dạng timestamp
timestamp_now = date_time_now.timestamp[]
Tips 4: Chuyển hóa kiểu native date sang UTC timezone
Tips 5: Convert UTC sang timezone khác
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[]]
Tips 6: Chuyên từ Timestamp sang Datetime
Tips 5: Convert UTC sang timezone khác
Tips 6: Chuyên từ Timestamp sang Datetime
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[]]
Tips 6: Chuyên từ Timestamp sang Datetime
Tips 7: Convert Datetime sang ISO 8601Tips 7: Convert Datetime sang ISO 8601
Example 1: datetime to string using strftime[]
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
How strftime[] works?
Example 2: Creating string from a timestamp
Example 2: Creating string from a timestamp
Format Code List
Example 3: Locale's appropriate date and time
How to convert a time to a stringNội dung chính
- Example 1: datetime to string using strftime[]
- How strftime[] works?
- Example 2: Creating string from a timestamp
- Format Code List
- Example 3: Locale's appropriate date and time
- How do I change date format from YYYY MM DD in Python?
- How do you change a date format from a string in Python?
- How do I convert datetime to date format?
- How do I change the date format from YYYY MM DD in pandas?
Đầu tiên, cũng là quan trọng nhất, chuẩn hóa múi giờ sử dụng để convert các kiểu thời gian. Mình lựa chọn sử dụng chuẩn múi giờ 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 format thời gian khác nhau.
a = "2011-06-09"
Tham khảo thêm về thời gian UTC tại
"Jun 09,2011"
Xử lý bằng hàm
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]
7Jun 9, 2011 at 6:272
>>> import datetime
>>> d = datetime.datetime.strptime['2011-06-09', '%Y-%m-%d']
>>> d.strftime['%b %d,%Y']
'Jun 09,2011'
Xử lý bằng strptime
Lưu ý:Jun 9, 2011 at 6:30
Các rất nhiều format time khác nhau nên để có thể chuyển từ string thành Datetime
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]
7 chỉ có thể xử lý một số dạng tiêu chuẩn, nếu khác dạng tiêu chuẩn phải hiểu ra cấu trúc time string để sử dụng hàm 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]
9 để cắt chuỗi tạo DatetimeNPE
Nếu kiểu dữ liệu Datetime không rõ múi giờ thì được gọi là
0103 gold badges921 silver badges994 bronze badgesimport datetime
# Dạng datetime
date_time_now = datetime.datetime.now[]
# Dạng timestamp
timestamp_now = date_time_now.timestamp[]
1
Timestamp là kiểu thời gian thông dụng của hệ thông Unix, tìm hiểu thêm tại
Kiểm tra kiểu timezone
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]
0Lưu ý: không sử dụng hàm replace, hàm replace sẽ chỉ thay đổi tzinfo không qui đổi thời gian từ múi giờ này sang múi giờ khácJun 9, 2011 at 6:31
Nếu bạn ở 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ậy nếu Datetime đang ở múi giờ UTC, ta phải convert nó sáng giờ Việt Nammgiuca
6 gold badges52 silver badges70 bronze
badgesimport 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]
1
ISO 8601 là một 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 năm 1988, mô tả quy cách 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 là string format time thông dụng.
Example 1: datetime to string using strftime[]
How strftime[] works?
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]
1Example 2: Creating string from a timestamp
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]
2Format Code List
How strftime[] works?
Example 2: Creating string from a timestamp
- Chúng tôi đã nhập lớp
6 từ mô -đunimport datetime # Dạng datetime date_time_now = datetime.datetime.now[] # Dạng timestamp timestamp_now = date_time_now.timestamp[]
6. Đó là bởi vì đối tượng của lớpimport datetime # Dạng datetime date_time_now = datetime.datetime.now[] # Dạng timestamp timestamp_now = date_time_now.timestamp[]
6 có thể truy cập phương thứcimport datetime # Dạng datetime date_time_now = datetime.datetime.now[] # Dạng timestamp timestamp_now = date_time_now.timestamp[]
5.import datetime # Dạng datetime date_time_now = datetime.datetime.now[] # Dạng timestamp timestamp_now = date_time_now.timestamp[]
- Đối tượng
6 chứa ngày và thời gian hiện tại được lưu trữ trong biến bây giờ.import datetime # Dạng datetime date_time_now = datetime.datetime.now[] # Dạng timestamp timestamp_now = date_time_now.timestamp[]
- Phương pháp
5 có thể được sử dụng để tạo các chuỗi được định dạng.import datetime # Dạng datetime date_time_now = datetime.datetime.now[] # Dạng timestamp timestamp_now = date_time_now.timestamp[]
- Chuỗi bạn chuyển sang phương thức
5 có thể chứa nhiều hơn một mã định dạng.import datetime # Dạng datetime date_time_now = datetime.datetime.now[] # Dạng timestamp timestamp_now = date_time_now.timestamp[]
Ví dụ 2: Tạo chuỗi từ dấu thời gian
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]
3Khi bạn chạy chương trình, đầu ra sẽ là:
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]
4Danh sách mã định dạng
Bảng dưới đây hiển thị tất cả các mã mà bạn có thể chuyển sang phương thức
import datetime
# Dạng datetime
date_time_now = datetime.datetime.now[]
# Dạng timestamp
timestamp_now = date_time_now.timestamp[]
5.
Chỉ thị | Nghĩa | Thí dụ |
0 | Tên viết tắt tên ngày trong tuần. | Sun mon, ... |
1 | Tên đầy đủ trong tuần. | Chủ nhật thứ hai, ... |
2 | Ngày trong tuần là một số thập phân. | 0, 1, ..., 6 |
0 | Ngày trong tháng dưới dạng số thập phân không. | 01, 02, ..., 31 |
4 | Ngày trong tháng dưới dạng số thập phân. | 1, 2, ..., 30 |
5 | Tên tháng viết tắt. | Jan, tháng 2, ..., tháng 12 |
6 | Tên đầy đủ. | Tháng một tháng hai, ... |
9 | Tháng dưới dạng số thập phân bằng không. | 01, 02, ..., 12 |
8 | Tháng như một số thập phân. | 1, 2, ..., 12 |
9 | Năm không có thế kỷ như một số thập phân số không. | 00, 01, ..., 99 |
0 | Năm không có thế kỷ như một số thập phân. | 0, 1, ..., 99 |
8 | Năm với thế kỷ như một số thập phân. | 2013, 2019, v.v. |
2 | Giờ [đồng hồ 24 giờ] là một số thập phân bằng không. | 00, 01, ..., 23 |
3 | Giờ [đồng hồ 24 giờ] là một số thập phân. | 0, 1, ..., 23 |
4 | Giờ [đồng hồ 12 giờ] là một số thập phân bằng không. | 01, 02, ..., 12 |
8 | Tháng như một số thập phân. | 1, 2, ..., 12 |
9 | Năm không có thế kỷ như một số thập phân số không. | 00, 01, ..., 99 |
0 | Năm không có thế kỷ như một số thập phân. | 0, 1, ..., 99 |
8 | Năm với thế kỷ như một số thập phân. | 2013, 2019, v.v. |
2 | Giờ [đồng hồ 24 giờ] là một số thập phân bằng không. | 0, 1, ..., 99 |
8 | Năm với thế kỷ như một số thập phân. | 2013, 2019, v.v. |
2 | Giờ [đồng hồ 24 giờ] là một số thập phân bằng không. | 00, 01, ..., 23 |
3 | Giờ [đồng hồ 24 giờ] là một số thập phân. | 0, 1, ..., 23 |
4 | Giờ [đồng hồ 12 giờ] là một số thập phân bằng không. | 0, 1, ..., 23 |
4 | Giờ [đồng hồ 12 giờ] là một số thập phân bằng không. | 5 |
Giờ [đồng hồ 12 giờ] là một số thập phân. | 1, 2, ... 12 | 6 |
Locale từ AM hoặc PM. | Sáng, chiều | 7 |
Phút như một số thập phân bằng không. | 00, 01, ..., 59 | 7 |
Phút như một số thập phân bằng không. | 00, 01, ..., 59 | 8 |
Phút như một số thập phân. | 0, 1, ..., 59 | 9 |
Thứ hai là một số thập phân bằng không. | 0 | Thứ hai là một số thập phân. |
1 | Microsecond như một số thập phân, không được dán bên trái. | 000000 - 999999 |
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
2
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
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]
5Khi bạn chạy chương trình, đầu ra sẽ là:
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]
6UTC bù ở dạng +hhmm hoặc -hhmm.
& nbsp;
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
3
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
Tên múi giờ..
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
4Ngày trong năm dưới dạng số thập phân không có viền.
001, 002, ..., 366
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
5
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
Ngày trong năm dưới dạng số thập phân.
1, 2, ..., 366
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
6Số tuần của năm [Chủ nhật là ngày đầu tiên của tuần]. Tất cả các ngày trong một năm mới trước Chủ nhật đầu tiên được coi là vào tuần 0.
00, 01, ..., 53
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
7use the CONVERT[] , TRY_CONVERT[] , or CAST[] function.Số tuần của năm [thứ Hai là ngày đầu tiên của tuần]. Tất cả các ngày trong một năm mới trước ngày thứ Hai đầu tiên được coi là vào tuần 0.
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
8Đại diện ngày và thời gian thích hợp của địa phương.
Thứ Hai ngày 30 tháng 9 07:06:05 2013
import datetime
date_time_now = datetime.datetime.now[]
# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat[]
9