Chuỗi ngày Python đến đối tượng ngày


345

Làm cách nào để chuyển đổi một chuỗi thành một đối tượng ngày trong python?

Chuỗi sẽ là: "24052010"(tương ứng với định dạng "%d%m%Y":)

Tôi không muốn một đối tượng datetime.datetime, mà là một datetime.date.

Câu trả lời:


586

Bạn có thể sử dụng strptimetrong datetimegói Python:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)

Tôi đang thử một quy trình tương tự ngoại trừ chuỗi đầu vào của tôi không có năm, vì vậy nó trông giống như '2405'. Theo mặc định, năm được lấy là 1900. Sự cố xảy ra khi phân tích ngày tháng hai như '2902'. Tôi nhận được lỗi này ValueError: day is out of range for month. Không chắc chắn làm thế nào tôi có thể đặt năm mặc định trong khi phân tích cú pháp.
Shubham Naik

85
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()

59

Câu hỏi liên quan trực tiếp:

Nếu bạn có

datetime.datetime.strptime("2015-02-24T13:00:00-08:00", "%Y-%B-%dT%H:%M:%S-%H:%M").date()

và bạn nhận được:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/_strptime.py", line 308, in _strptime
    format_regex = _TimeRE_cache.compile(format)
  File "/usr/local/lib/python2.7/_strptime.py", line 265, in compile
    return re_compile(self.pattern(format), IGNORECASE)
  File "/usr/local/lib/python2.7/re.py", line 194, in compile
    return _compile(pattern, flags)
  File "/usr/local/lib/python2.7/re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: redefinition of group name 'H' as group 7; was group 4

và bạn đã thử:

<-24T13:00:00-08:00", "%Y-%B-%dT%HH:%MM:%SS-%HH:%MM").date()

nhưng bạn vẫn nhận được dấu vết ở trên.

Câu trả lời:

>>> from dateutil.parser import parse
>>> from datetime import datetime
>>> parse("2015-02-24T13:00:00-08:00")
datetime.datetime(2015, 2, 24, 13, 0, tzinfo=tzoffset(None, -28800))

1
2015-07-20 09: 46: 55 + 00: 00 tôi có loại dữ liệu này, làm thế nào để tôi có được đối tượng ngày?
Hardik Gajjar

Sử dụng mô đun re (biểu thức chính quy) để thay đổi dữ liệu của bạn từ "2015-07-20 09: 46: 55 + 00: 00" thành "2015-07-20T09: 46: 55-00: 00". Sau đó sử dụng dateutil.parse để lấy đối tượng ngày.
Schopenhauer

1
Cảm ơn bạn, thực sự vấn đề là loại đối tượng dict và tôi chỉ nhận được giải pháp bằng cách sử dụng dict.get bằng cách sử dụng
Hardik Gajjar

2
Một ý tưởng khác là đọc hướng dẫn sử dụng docs.python.org/3/l Library / For và lưu ý rằng% B là viết tắt của "Tháng như tên đầy đủ của miền địa phương." giống như "tháng một" hoặc "tháng mười hai" vì vậy "02" sẽ không phân tích cú pháp.
Lật

1
Chuỗi định dạng ngày trong này không chính xác, nó phải là% m chứ không phải là% B
theannouncer

24

Nếu bạn lười biếng và không muốn chiến đấu với chuỗi ký tự, bạn chỉ có thể đi với parsermô-đun.

from dateutil import parser
dt = parser.parse("Jun 1 2005  1:33PM")
print(dt.year, dt.month, dt.day,dt.hour, dt.minute, dt.second)
>2005 6 1 13 33 0

Chỉ là một lưu ý phụ , vì chúng tôi đang cố gắng khớp với anybiểu diễn chuỗi, nó chậm hơn 10 lần so vớistrptime


Giải pháp rất đơn giản, cảm ơn. Tôi đã cố gắng chuyển đổi một ngày dài Excel đang được hiển thị làMonday, June 03, 2019
Jeff Bluasher

5

bạn có một chuỗi ngày như thế này, "24052010" và bạn muốn đối tượng ngày cho điều này,

from datetime import datetime
cus_date = datetime.strptime("24052010", "%d%m%Y").date()

cus_date này sẽ cung cấp cho bạn đối tượng ngày.

bạn có thể truy xuất chuỗi ngày từ đối tượng ngày của mình bằng cách này,

cus_date.strftime("%d%m%Y")

3

Có một thư viện khác được gọi là arrowthực sự tuyệt vời để thực hiện thao tác vào ngày trăn.

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True

1

Sử dụng mô-đun thời gian để chuyển đổi dữ liệu.

Đoạn mã:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.