Hướng dẫn how to convert date string to utc date in python - cách chuyển đổi chuỗi ngày tháng thành ngày tháng utc trong python

2

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang phân tích một trang web của bên thứ 3 HTML với ngày và thời gian luôn ở định dạng thời gian của Vương quốc Anh, tuy nhiên họ không có bất kỳ thông tin nào trong nguồn. Chuyển đổi chuỗi thành một đối tượng đủ dễ dàng bằng cách sử dụng datetime.strptime (), nhưng làm cách nào để thêm thông tin múi giờ?

Cuối cùng, tôi cần chuyển đổi các chuỗi này thành một đối tượng DateTime ở định dạng UTC. Mã này sẽ luôn chạy trên một PC nhận thức được thời gian, tức là DateTime.now () sẽ trả về thời gian của Vương quốc Anh.

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')

Có cách nào đẹp hơn để làm điều này không?

offset = datetime.now() - datetime.utcnow()
dt -= offset

Đã hỏi ngày 7 tháng 12 năm 2017 lúc 21:06Dec 7, 2017 at 21:06

Hướng dẫn how to convert date string to utc date in python - cách chuyển đổi chuỗi ngày tháng thành ngày tháng utc trong python

BirchybirchyBirchy

Phim huy hiệu bạc 2111 silver badge5 bronze badges

Sử dụng pytz

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)

Đã trả lời ngày 7 tháng 12 năm 2017 lúc 21:12Dec 7, 2017 at 21:12

AdamadamAdam

3.7622 Huy hiệu vàng18 Huy hiệu bạc37 Huy hiệu đồng2 gold badges18 silver badges37 bronze badges

4

Có một số thư viện tốt giúp việc làm việc với ngày dễ dàng hơn nhiều. Tôi thích DateParser, ParsedateTime và Arrow;

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00

Đã trả lời ngày 7 tháng 12 năm 2017 lúc 22:08Dec 7, 2017 at 22:08

Hướng dẫn how to convert date string to utc date in python - cách chuyển đổi chuỗi ngày tháng thành ngày tháng utc trong python

StevejstevejSteveJ

2.8561 Huy hiệu vàng24 Huy hiệu bạc38 Huy hiệu đồng1 gold badge24 silver badges38 bronze badges

Giới thiệu

Một trong nhiều vấn đề phổ biến mà chúng ta gặp phải trong phát triển phần mềm là xử lý ngày và thời gian. Ví dụ, sau khi nhận được một chuỗi thời gian từ API, chúng ta cần chuyển đổi nó thành định dạng có thể đọc được của con người. Một lần nữa, nếu cùng một API được sử dụng trong các múi giờ khác nhau, việc chuyển đổi sẽ khác nhau. Một thư viện thời gian tốt nên chuyển đổi thời gian theo múi giờ. Đây chỉ là một trong nhiều sắc thái cần được xử lý khi xử lý ngày và thời gian.

Rất may, Python đi kèm với mô-đun tích hợp

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 để xử lý ngày và thời gian. Như bạn có thể đoán, nó đi kèm với các chức năng khác nhau để thao túng ngày và thời gian. Sử dụng mô-đun này, chúng ta có thể dễ dàng phân tích bất kỳ chuỗi thời gian nào và chuyển đổi nó thành đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4.

Chuyển đổi chuỗi bằng cách sử dụng DateTime

Mô -đun DateTime bao gồm ba loại đối tượng khác nhau:

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
6,
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
7 và
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4. Rõ ràng đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
6 giữ ngày,
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
7 giữ thời gian và
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 giữ cả ngày và giờ.

Ví dụ: mã sau sẽ in ngày và giờ hiện tại:

import datetime

print ('Current date/time: {}'.format(datetime.datetime.now()))

Chạy mã này sẽ in một cái gì đó tương tự như thế này:

$ python3 datetime-print-1.py
Current date/time: 2018-06-29 08:15:27.243860

Khi không có định dạng tùy chỉnh, định dạng chuỗi mặc định được sử dụng, tức là định dạng cho "2018-06-29 08: 15: 27.243860" ở định dạng ISO 8601 (YYYY-MM-DDTHH: MM: SS.MMMMMM). Nếu chuỗi đầu vào của chúng tôi để tạo đối tượng

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 ở cùng định dạng ISO 8601, chúng ta có thể dễ dàng phân tích nó vào đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4.

Hãy xem mã bên dưới:

import datetime

date_time_str = '2018-06-29 08:15:27.243860'
date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)

Chạy nó sẽ in ngày, giờ và thời gian ngày:

$ python3 datetime-print-2.py
Date: 2018-06-29
Time: 08:15:27.243860
Date-time: 2018-06-29 08:15:27.243860

Trong ví dụ này, chúng tôi đang sử dụng một phương thức mới gọi là

import datetime

print ('Current date/time: {}'.format(datetime.datetime.now()))
4. Phương thức này có hai đối số: phương pháp đầu tiên là biểu diễn chuỗi của thời gian ngày và thứ hai là định dạng của chuỗi đầu vào. Chỉ định định dạng như thế này làm cho việc phân tích cú pháp nhanh hơn nhiều vì
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 không cần phải thử và tự giải thích định dạng, điều này đắt hơn nhiều về mặt tính toán. Giá trị trả về là loại
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4.

Trong ví dụ của chúng tôi,

import datetime

print ('Current date/time: {}'.format(datetime.datetime.now()))
7 là chuỗi đầu vào và
import datetime

print ('Current date/time: {}'.format(datetime.datetime.now()))
8 là định dạng của chuỗi ngày của chúng tôi. Giá trị
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 được trả về được lưu trữ trong biến
$ python3 datetime-print-1.py
Current date/time: 2018-06-29 08:15:27.243860
0. Vì đây là đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4, chúng ta có thể gọi trực tiếp các phương thức
$ python3 datetime-print-1.py
Current date/time: 2018-06-29 08:15:27.243860
2 và
$ python3 datetime-print-1.py
Current date/time: 2018-06-29 08:15:27.243860
3 trên nó. Như bạn có thể thấy từ đầu ra, nó in phần 'ngày' và 'thời gian' của chuỗi đầu vào.

Bạn có thể tự hỏi ý nghĩa của định dạng

import datetime

print ('Current date/time: {}'.format(datetime.datetime.now()))
8 là gì. Chúng được gọi là mã thông báo định dạng. Mỗi mã thông báo đại diện cho một phần khác nhau của thời gian, như ngày, tháng, năm, v.v. Hãy xem tài liệu Strptime để biết danh sách tất cả các loại mã định dạng khác nhau được hỗ trợ trong Python. Để tham khảo nhanh, đây là những gì chúng tôi đang sử dụng trong mã ở trên:

  • $ python3 datetime-print-1.py
    Current date/time: 2018-06-29 08:15:27.243860
    
    5: Năm (4 chữ số)
  • $ python3 datetime-print-1.py
    Current date/time: 2018-06-29 08:15:27.243860
    
    6: Tháng
  • $ python3 datetime-print-1.py
    Current date/time: 2018-06-29 08:15:27.243860
    
    7: Ngày trong tháng
  • $ python3 datetime-print-1.py
    Current date/time: 2018-06-29 08:15:27.243860
    
    8: giờ (24 giờ)
  • $ python3 datetime-print-1.py
    Current date/time: 2018-06-29 08:15:27.243860
    
    9: phút
  • import datetime
    
    date_time_str = '2018-06-29 08:15:27.243860'
    date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')
    
    print('Date:', date_time_obj.date())
    print('Time:', date_time_obj.time())
    print('Date-time:', date_time_obj)
    
    0 giây
  • import datetime
    
    date_time_str = '2018-06-29 08:15:27.243860'
    date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')
    
    print('Date:', date_time_obj.date())
    print('Time:', date_time_obj.time())
    print('Date-time:', date_time_obj)
    
    1: micro giây

Tất cả những mã thông báo này, ngoại trừ năm, dự kiến ​​sẽ không được dán.

Vì vậy, nếu định dạng của một chuỗi được biết đến, nó có thể dễ dàng phân tích cú pháp vào đối tượng

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 bằng cách sử dụng
import datetime

print ('Current date/time: {}'.format(datetime.datetime.now()))
4. Hãy để tôi chỉ cho bạn thêm một ví dụ không tầm thường:

import datetime

date_time_str = 'Jun 28 2018 7:40AM'
date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)

Từ đầu ra sau, bạn có thể thấy rằng chuỗi đã được phân tích thành công vì nó được in đúng bởi đối tượng

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 tại đây:

$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00

Dưới đây là một vài ví dụ khác về các định dạng thời gian thường được sử dụng và mã thông báo được sử dụng để phân tích cú pháp:

offset = datetime.now() - datetime.utcnow()
dt -= offset
0

Bạn có thể phân tích một chuỗi thời gian ngày của bất kỳ định dạng nào bằng cách sử dụng bảng được đề cập trong tài liệu Strptime.

Đối phó với thời gian và DateTime

Xử lý thời gian ngày trở nên phức tạp hơn trong khi đối phó với múi giờ. Tất cả các ví dụ trên chúng tôi đã thảo luận là các đối tượng

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 ngây thơ, tức là các đối tượng này không chứa bất kỳ dữ liệu liên quan đến timezone nào. Đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 có một biến chứa thông tin múi giờ,
import datetime

date_time_str = '2018-06-29 08:15:27.243860'
date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
7.

offset = datetime.now() - datetime.utcnow()
dt -= offset
1

Mã này sẽ in:

offset = datetime.now() - datetime.utcnow()
dt -= offset
2

Đầu ra của

import datetime

date_time_str = '2018-06-29 08:15:27.243860'
date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
7 là
import datetime

date_time_str = '2018-06-29 08:15:27.243860'
date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
9 vì nó là một đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 ngây thơ. Để chuyển đổi timezone, một thư viện có tên
$ python3 datetime-print-2.py
Date: 2018-06-29
Time: 08:15:27.243860
Date-time: 2018-06-29 08:15:27.243860
1 có sẵn cho Python. Bạn có thể cài đặt nó như mô tả trong các hướng dẫn này. Bây giờ, chúng ta hãy sử dụng thư viện
$ python3 datetime-print-2.py
Date: 2018-06-29
Time: 08:15:27.243860
Date-time: 2018-06-29 08:15:27.243860
1 để chuyển đổi dấu thời gian ở trên sang UTC.

offset = datetime.now() - datetime.utcnow()
dt -= offset
3

Output:

offset = datetime.now() - datetime.utcnow()
dt -= offset
4

$ python3 datetime-print-2.py
Date: 2018-06-29
Time: 08:15:27.243860
Date-time: 2018-06-29 08:15:27.243860
3 là sự khác biệt giữa thời gian hiển thị và thời gian UTC. Trong ví dụ này, giá trị của
import datetime

date_time_str = '2018-06-29 08:15:27.243860'
date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
7 cũng xảy ra với UTC, do đó độ bù
$ python3 datetime-print-2.py
Date: 2018-06-29
Time: 08:15:27.243860
Date-time: 2018-06-29 08:15:27.243860
5. Trong trường hợp này, đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 là một đối tượng nhận biết múi giờ.

Tương tự, chúng ta có thể chuyển đổi chuỗi thời gian ngày thành bất kỳ múi giờ nào khác. Ví dụ: chúng ta có thể chuyển đổi chuỗi "2018-06-29 17: 08: 00.586525+00: 00" thành timezone "America/new_york", như được hiển thị bên dưới:

offset = datetime.now() - datetime.utcnow()
dt -= offset
5

Output:

offset = datetime.now() - datetime.utcnow()
dt -= offset
6

Đầu tiên, chúng tôi đã chuyển đổi chuỗi thành đối tượng

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4,
$ python3 datetime-print-1.py
Current date/time: 2018-06-29 08:15:27.243860
0. Sau đó, chúng tôi đã chuyển đổi nó thành một đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 hỗ trợ thời gian,
import datetime

date_time_str = 'Jun 28 2018 7:40AM'
date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
0. Vì chúng tôi đã đặt timezone là "America/new_york", thời gian đầu ra cho thấy rằng nó ở phía sau 4 giờ so với thời gian UTC. Bạn có thể kiểm tra trang Wikipedia này để tìm danh sách đầy đủ các múi giờ có sẵn.

Chuyển đổi thời gian

Chúng ta có thể chuyển đổi múi giờ của đối tượng

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 từ vùng này sang vùng khác, như được hiển thị trong ví dụ dưới đây:

offset = datetime.now() - datetime.utcnow()
dt -= offset
7

Đầu tiên, chúng tôi đã tạo một đối tượng DateTime với thời gian hiện tại và đặt nó là múi giờ "America/new_york". Sau đó, sử dụng phương pháp

import datetime

date_time_str = 'Jun 28 2018 7:40AM'
date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
2, chúng tôi đã chuyển đổi thời gian
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 này thành timezone "Châu Âu/London". Cả hai
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 sẽ in các giá trị khác nhau như:

Kiểm tra hướng dẫn thực hành của chúng tôi, thực tế để học Git, với các thực hành tốt nhất, các tiêu chuẩn được công nghiệp chấp nhận và bao gồm bảng gian lận. Ngừng các lệnh git googling và thực sự tìm hiểu nó!

offset = datetime.now() - datetime.utcnow()
dt -= offset
8

Đúng như dự đoán, thời gian ngày khác nhau vì chúng cách nhau khoảng 5 giờ.

Sử dụng thư viện của bên thứ ba

Mô -đun

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 của Python có thể chuyển đổi tất cả các loại chuỗi khác nhau thành đối tượng
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4. Nhưng vấn đề chính là để làm điều này, bạn cần tạo chuỗi mã định dạng phù hợp mà
import datetime

print ('Current date/time: {}'.format(datetime.datetime.now()))
4 có thể hiểu. Tạo chuỗi này cần có thời gian và nó làm cho mã khó đọc hơn. Thay vào đó, chúng tôi có thể sử dụng các thư viện của bên thứ ba khác để làm cho nó dễ dàng hơn.

Trong một số trường hợp, các thư viện của bên thứ ba này cũng có hỗ trợ tích hợp tốt hơn để thao tác và so sánh thời gian ngày, và một số thậm chí có thời gian được tích hợp theo thời gian, vì vậy bạn không cần phải bao gồm một gói bổ sung.

Chúng ta hãy xem một vài trong số các thư viện này trong các phần sau.

ngày

Mô -đun DateUtil là một phần mở rộng cho mô -đun

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4. Một lợi thế là chúng ta không cần chuyển bất kỳ mã phân tích cú pháp nào để phân tích chuỗi. Ví dụ:

offset = datetime.now() - datetime.utcnow()
dt -= offset
9

Hàm

import datetime

date_time_str = 'Jun 28 2018 7:40AM'
date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)
9 này sẽ tự động phân tích chuỗi và lưu trữ nó trong biến
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4. Phân tích cú pháp được thực hiện tự động. Bạn không cần phải đề cập đến bất kỳ chuỗi định dạng nào. Hãy cố gắng phân tích các loại chuỗi khác nhau bằng cách sử dụng
$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
1:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
0

Output:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
1

Bạn có thể thấy rằng hầu hết mọi loại chuỗi có thể được phân tích dễ dàng bằng mô -đun

$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
1.

Mặc dù điều này thuận tiện, nhưng hãy nhớ lại từ trước đó rằng phải dự đoán định dạng làm cho mã chậm hơn nhiều, vì vậy nếu mã của bạn yêu cầu hiệu suất cao thì đây có thể không phải là cách tiếp cận phù hợp cho ứng dụng của bạn.

Maya

Maya cũng làm cho nó rất dễ phân tích một chuỗi và để thay đổi thời gian. Một số ví dụ đơn giản được hiển thị ở đây:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
2

Output:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
3

Để chuyển đổi thời gian sang một múi giờ khác:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
4

Output:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
5

Bây giờ không phải là dễ sử dụng? Hãy thử

$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
3 với cùng một bộ chuỗi mà chúng tôi đã sử dụng với
$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
1:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
6

Output:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
7

Như bạn có thể thấy, tất cả các định dạng ngày đã được phân tích thành công.

Nhưng bạn có nhận thấy sự khác biệt không? Nếu chúng tôi không cung cấp thông tin múi giờ thì nó sẽ tự động chuyển đổi nó thành UTC. Vì vậy, điều quan trọng cần lưu ý là chúng tôi phải cung cấp các tham số

$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
5 và
$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
6 nếu thời gian không có trong UTC.

Mũi tên

Mũi tên là một thư viện khác để xử lý DateTime trong Python. Và giống như trước đây với

$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
3, nó cũng tự động tìm ra định dạng DateTime. Sau khi được giải thích, nó trả về một đối tượng Python
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 từ đối tượng
$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
9.

Hãy thử điều này với cùng một chuỗi ví dụ mà chúng tôi đã sử dụng cho

$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
3:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
8

Output:

import datetime
import pytz

temp = '07/12/2017 13:30'
dt = datetime.strptime(temp, '%d/%m/%Y %H:%M')
timezone = pytz.timezone("Etc/Greenwich")
d_aware = timezone.localize(dt)
d_aware.tzinfo
> <DstTzInfo 'Etc/Greenwich' PST-1 day, 16:00:00 STD>
d_aware
datetime.datetime(2017, 12, 7, 13, 30, tzinfo=<StaticTzInfo 'Etc/Greenwich'>)
9

Và đây là cách bạn có thể sử dụng

$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00
9 để chuyển đổi thời gian bằng phương pháp
offset = datetime.now() - datetime.utcnow()
dt -= offset
02:

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
0

Output:

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
1

Như bạn có thể thấy chuỗi thời gian ngày được chuyển đổi thành khu vực "America/new_york".

Bây giờ, chúng ta hãy sử dụng cùng một bộ chuỗi mà chúng ta đã sử dụng ở trên:

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
2

Mã này sẽ thất bại đối với các chuỗi thời gian đã được nhận xét, đó là hơn một nửa các ví dụ của chúng tôi. Đầu ra cho các chuỗi khác sẽ là:

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
3

Để phân tích chính xác các chuỗi thời gian mà tôi đã nhận xét, bạn sẽ cần phải vượt qua các mã thông báo định dạng tương ứng để đưa ra manh mối thư viện về cách phân tích cú pháp. Ví dụ: "MMM" cho tên tháng, như "Jan, Feb, Mar", v.v. Bạn có thể kiểm tra hướng dẫn này cho tất cả các mã thông báo có sẵn.

Sự kết luận

Trong bài viết này, chúng tôi đã chỉ ra những cách khác nhau để phân tích một chuỗi vào một đối tượng

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 trong Python. Bạn có thể chọn thư viện Python
import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 mặc định hoặc bất kỳ thư viện nào của bên thứ ba được đề cập trong bài viết này, trong số nhiều thư viện khác.

Vấn đề chính với gói

import dateparser as dp
dt = dp.parse('07-12-2017 13:30 PST')
print (dt)

dt = dp.parse("Yesterday at 3:00am EST")
print(dt)


2017-07-12 13:30:00-08:00
2017-12-06 17:07:07.557109-05:00
4 mặc định là chúng ta cần chỉ định mã phân tích cú pháp theo cách thủ công cho hầu hết các định dạng chuỗi thời gian ngày. Vì vậy, nếu định dạng chuỗi của bạn thay đổi trong tương lai, bạn cũng có thể sẽ phải thay đổi mã của mình. Nhưng nhiều thư viện của bên thứ ba, như các thư viện được đề cập ở đây, tự động xử lý nó.

Một vấn đề nữa chúng ta gặp phải là xử lý thời gian. Cách tốt nhất để xử lý chúng là luôn luôn lưu trữ thời gian trong cơ sở dữ liệu của bạn dưới dạng định dạng UTC và sau đó chuyển đổi nó thành múi giờ cục bộ của người dùng khi cần.

Các thư viện này không chỉ tốt cho các chuỗi phân tích cú pháp, mà chúng có thể được sử dụng cho rất nhiều loại hoạt động liên quan đến thời gian ngày khác nhau. Tôi khuyến khích bạn đi qua các tài liệu để tìm hiểu chi tiết các chức năng.

Làm thế nào để bạn chuyển đổi DateTime thành UTC trong Python?

Nhận dấu thời gian UTC sử dụng DateTime.ngày giờ.Bây giờ () để có được ngày và thời gian hiện tại.Sau đó sử dụng lớp TZINFO để chuyển đổi DateTime của chúng tôi thành UTC.use tzinfo class to convert our datetime to UTC.

Làm thế nào để bạn chuyển đổi ngày thành định dạng UTC?

var bây giờ = ngày mới ();var utc = ngày mới (now.getTime () + now.getTimeZoneOfset () * 60000);var utc = new Date(now. getTime() + now. getTimezoneOffset() * 60000);

Làm cách nào để chuyển đổi một chuỗi thành một ngày cụ thể trong Python?

Chúng ta có thể chuyển đổi một chuỗi thành DateTime bằng hàm strptime ().Hàm này có sẵn trong các mô -đun DateTime và Time để phân tích một chuỗi vào các đối tượng DateTime và thời gian tương ứng.strptime() function. This function is available in datetime and time modules to parse a string to datetime and time objects respectively.

Làm cách nào để in ngày UTC trong Python?

Steps:..
Cài đặt mô -đun PYTZ bằng cách cài đặt PIP PYTZ ..
Sử dụng pytz.Chức năng TimeZone ('Vùng_name') để tạo đối tượng múi giờ ..
Sử dụng DateTime.Bây giờ (TimeZone_OBJ) Hàm để có được DateTime hiện tại với Timezone ..