Hướng dẫn python strptime timezone - múi giờ strptime của python

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.

Show

Tips 1: Chuẩn hóa múi giờ sử dụng

Đầ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.

Tham khảo thêm về thời gian UTC tại

Tips 2: Convert String thành Datetime

Xử lý bằng hàm

import datetime

# Dạng datetime
date_time_now = datetime.datetime.now()

# Dạng timestamp
timestamp_now = date_time_now.timestamp()
4

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 ý:

  • Các rất nhiều format time khác nhau nên để có thể chuyển từ string thành Datetime
    import datetime
    
    # Dạng datetime
    date_time_now = datetime.datetime.now()
    
    # Dạng timestamp
    timestamp_now = date_time_now.timestamp()
    
    4 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
    
    # Dạng datetime
    date_time_now = datetime.datetime.now()
    
    # Dạng timestamp
    timestamp_now = date_time_now.timestamp()
    
    6 để cắt chuỗi tạo Datetime
  • Nếu kiểu dữ liệu Datetime không rõ múi giờ thì được gọi là
    import datetime
    
    # Dạng datetime
    date_time_now = datetime.datetime.now()
    
    # Dạng timestamp
    timestamp_now = date_time_now.timestamp()
    
    7

Tips 3: Chuyển hóa kiểu Datetime sang Timestamp Python

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

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

Kiểm tra kiểu timezone

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 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ác

Tips 5: Convert UTC sang timezone khác

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 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())

Tips 6: Chuyên từ Timestamp sang Datetime

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)

Tips 7: Convert Datetime sang ISO 8601

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.

import datetime

date_time_now = datetime.datetime.now()

# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat()

Nguồn

https://vi.wikipedia.org/wiki/Th%E1%BA%A3o_lu%E1%BA%ADn:M%C3%BAi_gi%E1%BB%9D

https://vi.wikipedia.org/wiki/Th%E1%BA%A3o_lu%E1%BA%ADn:M%C3%BAi_gi%E1%BB%9D


Thực hiện bởi cloud365.vn

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
  • 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
  • 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
  • Chuyển string sang datetime trong python
  • Cú pháp chuyển string sang datetime trong python
  • Bảng định dạng ngày tháng năm trong chuỗi python
  • Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra giống nhau
  • Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra khác nhau

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

Tips 1: Chuẩn hóa múi giờ sử dụng

Nội dung chính

Tips 1: Chuẩn hóa múi giờ sử dụng

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 2: Convert 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)

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 1: Chuẩn hóa múi giờ sử dụng

Tips 2: Convert String thành Datetime

import datetime

# Dạng datetime
date_time_now = datetime.datetime.now()

# Dạng timestamp
timestamp_now = date_time_now.timestamp()

Tips 2: Convert String thành Datetime

Tips 3: Chuyển hóa kiểu Datetime sang Timestamp Python

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 4: Chuyển hóa kiểu native date sang UTC timezone

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
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 4: Chuyển hóa kiểu native date sang UTC timezone

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)

Tips 5: Convert UTC sang timezone khác

Tips 6: Chuyên từ Timestamp sang Datetime

import datetime

date_time_now = datetime.datetime.now()

# Convert Datetime thành dạng ISO 8601
iso_format = date_time_now.isoformat()

Tips 7: Convert Datetime sang ISO 8601

Chuyển string sang datetime trong python

Chuyển string sang datetime trong python


Cú pháp chuyển string sang datetime trong python

Bảng định dạng ngày tháng năm trong chuỗi pythonchuyển string sang datetime trong python. Bạn sẽ học được cách chuyển string sang datetime bằng phương thức strptime() trong python cũng như cách định dạng thời gian của kết quả đầu ra với bảng định dạng ngày tháng năm trong python sau bài học này.

Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra giống nhauphương thức strptime() trong python. Tùy vào trường hợp mà chúng ta có thể định dạng đầu ra datetime giống với định dạng đầu vào của chuỗi hoặc là với một định dạng hoàn toàn khác. Sau khi chuyển string sang datetime trong python, chúng ta có thể tính toán thời gian được ghi ở chuỗi ban đầu, ví dụ như là cộng trừ ngày tháng trong Python hoặc là lấy ngày tháng năm và giờ từ datetime chẳng hạn.

Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra khác nhau

Tips 6: Chuyên từ Timestamp sang Datetime

Tips 7: Convert Datetime sang ISO 8601

Chuyển string sang datetime trong pythonphương thức strptime() trong python của module datetime để phân tích một chuỗi string chứa giá trị ngày giờ, sau đó chuyển chuỗi đó sang dạng datime trong python, với cú pháp sau đây:

Cú pháp chuyển string sang datetime trong python

Bảng định dạng ngày tháng năm trong chuỗi python

  • Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra giống nhau dùng để chỉ định tên phương thức
  • Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra khác nhau là chuỗi string chứa giá trị ngày giờ được viết theo định dạng chỉ định tại format.
  • Tính toán thời gian sau khi chuyển string sang datetime trong python là định dạng ngày tháng năm của chuỗi date_string, cũng như là của kết quả đầu ra.

Tổng kết và thực hành

Bảng định dạng ngày tháng năm trong chuỗi python

Định dạng ngày tháng năm trong python được chỉ định bằng bảng định dạng ngày tháng năm trong chuỗi python dưới đây:định dạng ngày tháng năm trong chuỗi python dưới đây:

FormatÝ nghĩa
%y Năm có hai chữ số 00, 01, …, 99
%Y Tháng có 4 chữ số 0001, 0002, …, 9999
%b Viết tắt tên tháng Jan, Feb, …, Dec ※1
%B Tên tháng January, February, …, December ※1
%m Tháng 01, 02, …, 12
%d Ngày 01, 02, …, 31
%H Giờ(24 giờ) 00, 01, …, 23
%I Giờ(12 giờ) 00, 01, …, 11
%p AM or PM ※1
%M Phút 00, 01, …, 59
%S Giây 00, 01, …, 59
%f Micro giây 000000, 000001, …, 999999
%z Time zone, +0000, -0400 etc
%Z Time zone UTC, EST

※1: Giá trị sẽ thay đổi thích hợp tùy theo local đã đặt. Về cách chỉ định locale hãy xem chi tiết ở bài Chỉ định locale trong datetime python

Sau đây chúng ta hãy cùng xem các ví dụ cụ thể về cách chuyển string sang datetime trong python như sau:

Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra giống nhau

Giả sử chúng ta có một chuỗi string chứa thông tin thời gian, và một format tương ứng với cách viết thời gian trong chuỗi string đó, thông qua bảng định dạng ngày tháng năm trong chuỗi python. Chúng ta sẽ chuyển chuỗi string này sâng định dạng format thời gian tương ứng với nó như sau:

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)
4

Một số ví dụ khác:

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)
5

Lưu ý là chúng ta cần chỉ định định dạng format của chuỗi string phải phù hợp với chuỗi string đó. Trong trường hợp chuỗi string có định dạng khác với format, lỗi ValueError sẽ xảy ra:

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)
6

Lỗi trả về:

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

Chuyển string sang datetime trong python với định dạng đầu vào và đầu ra khác nhau

Ở phần trên chúng ta đã biết cần chỉ định định dạng format của chuỗi phải đúng với định dạng thời gian được sử dụng trong chuỗi string ban đầu.

Điều này sẽ gây khó khăn cho chúng ta khi muốn tạo ra một datetime với định dạng format hoàn toàn khác với định dạng trong chuỗi. Ví dụ như chuỗi ban đầu có định dạng

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())
4 nhưng chúng ta muốn datetime có định dạng là
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())
5 chẳng hạn.

Trong trường hợp này, sau khi đã chuyển chuỗi string ban đầu sang datetime rồi, chúng ta cần phải thêm xử lý chuyển datetime thu được sang string với định dạng format khác, sau đó mới chuyển lại string có kiểu format khác đó sang datetime và thu về kết quả cuối cùng.chuyển datetime thu được sang string với định dạng format khác, sau đó mới chuyển lại string có kiểu format khác đó sang datetime và thu về kết quả cuối cùng.

Chúng ta sẽ sử dụng kết hợp phương thức strftime() với các bước sau đây:Bước 1: Chuyển string sang datetime trong python
Bước 1: Chuyển string sang datetime trong python

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)
8

Bước 2:Chuyển datetime kết quả sang string với định dạng format khác

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

Bước 3:Chuyển lại string với định dạng format khác sang dạng datetime và thu về kết quả cuối cùng

import datetime

# Dạng datetime
date_time_now = datetime.datetime.now()

# Dạng timestamp
timestamp_now = date_time_now.timestamp()
0

Tổng hợp lại, chúng ta viết mã lệnh như sau:

import datetime

# Dạng datetime
date_time_now = datetime.datetime.now()

# Dạng timestamp
timestamp_now = date_time_now.timestamp()
1

Tính toán thời gian sau khi chuyển string sang datetime trong python

Sau khi đã chuyển string sang datetime trong python, thông tin thời gian ở chuỗi string ban đầu đã được chuyển sang dạng datetime, do đó chúng ta có thể tiến hành các xử lý tính toán với datetime này.chuyển string sang datetime trong python, thông tin thời gian ở chuỗi string ban đầu đã được chuyển sang dạng datetime, do đó chúng ta có thể tiến hành các xử lý tính toán với datetime này.

Ví dụ, chúng ta có thể lấy ngày tháng năm và giờ từ datetime như sau:

import datetime

# Dạng datetime
date_time_now = datetime.datetime.now()

# Dạng timestamp
timestamp_now = date_time_now.timestamp()
2

Chúng ta cũng có thể cộng trừ ngày tháng với datetime thu được như sau:

import datetime

# Dạng datetime
date_time_now = datetime.datetime.now()

# Dạng timestamp
timestamp_now = date_time_now.timestamp()
3
  • Xem thêm: Lấy ngày tháng năm và giờ trong python
  • Xem thêm: Cộng trừ ngày tháng và so sánh thời gian trong pytho

Tổng kết và thực hành

Trên đây Kiyoshi đã hướng dẫn bạn về cách chuyển string sang datetime trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.chuyển string sang datetime trong python rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Trong trường hợp bạn muốn chuyển ngược lại giữa string và dattime, hãy tham khảo bài viết chuyển datetime sang string trong python nhé.

Viết bởi Kiyoshi. Đã đăng ký bản quyền tác giả tại Creativecommons và DMCA