Hướng dẫn time with timezone python - thời gian với trăn múi giờ

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.

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

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
    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 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[]
    
    0

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

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

//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ào Việc Nhiều Với Kiểu Dữ Liệu Datetime Trong Python. Vấn Đề Mình 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ào mình sẽ sử dụng python 3 để xử lý kiểu dữ liệu datetime.

Nội phân Chính showShow

  • Tổng Quan
  • Gần Đây Mình Có Lào Việc Nhiều Với Kiểu Dữ Liệu Datetime Trong Python. Vấn Đề Mình 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ào mình sẽ sử dụng python 3 để xử lý kiểu dữ liệu datetime.
  • Nội phân Chính show
  • Mẹo 1: Chuẩn Hón muy gi ử sử dụng
  • Mẹo 2: Chuyển đổi Chuỗi ThànH DateTime
  • Mẹo 3: Chuyển HùaA Kiểu DateTime Sang Timestamp Python
  • Lời khuyên 4: Chuyển Hón Kiểu Ngày bản địa hát UTC Timezone
  • Mẹo 5: Chuyển đổi UTC Sang Timezone Khác

Mẹo 6: Chuyên từ Timestamp Sang DateTime

  • Tổng Quan
  • Gần Đây Mình Có Lào Việc Nhiều Với Kiểu Dữ Liệu Datetime Trong Python. Vấn Đề Mình 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ào mình sẽ sử dụng python 3 để xử lý kiểu dữ liệu datetime.
  • Nội phân Chính show
  • Mẹo 1: Chuẩn Hón muy gi ử sử dụng
  • Mẹo 2: Chuyển đổi Chuỗi ThànH DateTime
  • Mẹo 3: Chuyển HùaA Kiểu DateTime Sang Timestamp Python
  • Lời khuyên 4: Chuyển Hón Kiểu Ngày bản địa hát UTC Timezone
  • Mẹo 5: Chuyển đổi UTC Sang Timezone Khác

Gần Đây Mình Có Lào Việc Nhiều Với Kiểu Dữ Liệu Datetime Trong Python. Vấn Đề Mình 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ào mình sẽ sử dụng python 3 để xử lý kiểu dữ liệu datetime.

Nội phân Chính show

Mẹo 1: Chuẩn Hón muy gi ử sử dụng

Nội phân Chính show

Mẹo 1: Chuẩn Hón muy 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]

Mẹo 2: Chuyển đổi Chuỗi 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]

Mẹo 3: Chuyển HùaA Kiểu DateTime Sang Timestamp Python

  • Lời khuyên 4: Chuyển Hón Kiểu Ngày bản địa hát UTC Timezone
  • Mẹo 5: Chuyển đổi UTC Sang Timezone Khác

Mẹo 1: Chuẩn Hón muy gi ử sử dụng

Mẹo 2: Chuyển đổi Chuỗi ThànH DateTime

import datetime

# Dạng datetime
date_time_now = datetime.datetime.now[]

# Dạng timestamp
timestamp_now = date_time_now.timestamp[]

Mẹo 2: Chuyển đổi Chuỗi ThànH DateTime

Mẹo 3: Chuyển HùaA 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[]]

Lời khuyên 4: Chuyển Hón Kiểu Ngày bản địa hát UTC Timezone

Mẹo 3: Chuyển HùaA Kiểu DateTime Sang Timestamp Python

Lời khuyên 4: Chuyển Hón Kiểu Ngày bản địa hát 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[]]

Lời khuyên 4: Chuyển Hón Kiểu Ngày bản địa hát 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]

Mẹo 5: Chuyển đổi UTC Sang Timezone Khác

Mẹo 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[]

Nguồn

//vi.wikipedia.org/wiki/TH%E1%BA%A3O_LU%E1

//vi.wikipedia.org/wiki/TH%E1%BA%A3O_LU%E1

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

Những gì tôi cần làm

Tôi có một đối tượng DateTime không biết thời gian, mà tôi cần thêm một múi giờ để có thể so sánh nó với các đối tượng DateTime nhận biết thời gian khác. Tôi không muốn chuyển đổi toàn bộ ứng dụng của mình thành Timezone không biết cho trường hợp di sản này.

Những gì tôi đã thử

Đầu tiên, để chứng minh vấn đề:

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

Đầu tiên, tôi đã thử astimezone:

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

Không có gì đáng ngạc nhiên khi thất bại này, vì nó thực sự đang cố gắng chuyển đổi. Thay thế dường như là một lựa chọn tốt hơn [theo cách tôi nhận được giá trị của DateTime.Today [] trong Python đó là "Timezone Aware"?]:

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

Nhưng như bạn có thể thấy, thay thế dường như đặt tzinfo, nhưng không làm cho đối tượng nhận thức được. Tôi đã sẵn sàng để quay trở lại với bác sĩ chuỗi đầu vào để có múi giờ trước khi phân tích nó [tôi đang sử dụng DateUtil để phân tích cú pháp, nếu điều đó quan trọng], nhưng điều đó có vẻ vô cùng kludgy.

Ngoài ra, tôi đã thử điều này trong cả Python 2.6 và Python 2.7, với cùng một kết quả.

Định nghĩa bài văn

Tôi đang viết một trình phân tích cú pháp cho một số tệp dữ liệu. Có một định dạng cũ tôi cần hỗ trợ trong đó chuỗi ngày không có chỉ báo múi giờ. Tôi đã sửa được nguồn dữ liệu, nhưng tôi vẫn cần hỗ trợ định dạng dữ liệu kế thừa. Chuyển đổi một lần dữ liệu kế thừa không phải là một lựa chọn cho các lý do BS doanh nghiệp khác nhau. Mặc dù nói chung, tôi không thích ý tưởng mã hóa cứng một thời gian mặc định, trong trường hợp này có vẻ như là lựa chọn tốt nhất. Tôi biết với sự tự tin hợp lý rằng tất cả các dữ liệu kế thừa được đề cập là ở UTC, vì vậy tôi đã sẵn sàng chấp nhận rủi ro mặc định trong trường hợp này.

Bài Viết Liên Quan

Chủ Đề