Làm cách nào để biến datetime python thành một chuỗi, với ngày định dạng có thể đọc được?


171
t = e['updated_parsed']
dt = datetime.datetime(t[0],t[1],t[2],t[3],t[4],t[5],t[6]
print dt
>>>2010-01-28 08:39:49.000003

Làm thế nào để tôi biến nó thành một chuỗi?:

"January 28, 2010"

8
dt = datetime.datetime(*t[:7])

Câu trả lời:


242

Lớp datetime có một phương thức strftime Tài liệu Python ghi lại các định dạng khác nhau mà nó chấp nhận:

Đối với ví dụ cụ thể này, nó sẽ trông giống như:

my_datetime.strftime("%B %d, %Y")

1
Câu hỏi ngớ ngẩn ... Có strftimekhác nhau giữa Python 2 và 3 không?
jww

Và nếu theo cách nào đó
Xanlantos

112

Đây là cách bạn có thể thực hiện tương tự bằng cách sử dụng chức năng định dạng chung của python ...

>>>from datetime import datetime
>>>"{:%B %d, %Y}".format(datetime.now())

Các nhân vật định dạng sử dụng ở đây cũng giống như những người sử dụng bởi strftime . Đừng bỏ lỡ hàng đầu : trong định dạng định dạng.

Sử dụng định dạng () thay vì strftime () trong hầu hết các trường hợp có thể làm cho mã dễ đọc hơn, dễ viết hơn và phù hợp với cách tạo đầu ra được định dạng ...

>>>"{} today's date is: {:%B %d, %Y}".format("Andre", datetime.now())

So sánh ở trên với các thay thế strftime () sau đây ...

>>>"{} today's date is {}".format("Andre", datetime.now().strftime("%B %d, %Y"))

Hơn nữa, sau đây sẽ không hoạt động ...

>>>datetime.now().strftime("%s %B %d, %Y" % "Andre")
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    datetime.now().strftime("%s %B %d, %Y" % "Andre")
TypeError: not enough arguments for format string

Và như thế...


1
Tôi đã tự hỏi những lợi ích của việc sử dụng định dạng () cho trường hợp này là gì, trên strftime (). Có phương pháp nào thể hiện một lợi ích khác ngoài sở thích cá nhân không? Sự khác biệt hiệu suất là gì?
Andre

2
@Andre Cảm ơn câu hỏi của bạn! Sở thích cá nhân thường được hướng dẫn bởi kinh nghiệm. Vui lòng xem câu trả lời được cập nhật của tôi để biết lý do tại sao tôi thích định dạng () hơn strftime (). Hiệu suất và Python là hai từ không hợp nhau. Tôi sẽ không quá quan tâm đến hiệu suất nếu tôi quyết định sử dụng Python. Khi tôi cần hiệu suất, tôi sử dụng một số ngôn ngữ hiệu suất cao được gõ tĩnh.
Tự động hóa

1
Phương pháp định dạng đơn giản hơn trong hầu hết các trường hợp. So sánh: print 'Today is {:%B %d, %Y}'.format(datetime.now())với print 'Today is {}'.format(datetime.now().strftime('%B %d, %Y'). Khi bạn đang sử dụng phương thức format (), tại sao không sử dụng nó cho định dạng ngày?
ChaimG

30

Sử dụng chuỗi f, trong Python 3.6+.

from datetime import datetime

date_string = f'{datetime.now():%Y-%m-%d %H:%M:%S%z}'

Điều này đưa ra lỗi cú pháp: "Cú pháp: cú pháp không hợp lệ". Bạn có thể vui lòng giải thích?
sajid

Đồng ý. Tôi có Python 3.5.1. Đó là lý do tại sao. Cảm ơn bạn đã làm rõ.
sajid

21

câu hỏi rất cũ, tôi biết. nhưng với chuỗi f mới (bắt đầu từ python 3.6), có các tùy chọn mới. vì vậy ở đây cho đầy đủ:

from datetime import datetime

dt = datetime.now()

# str.format
strg = '{:%B %d, %Y}'.format(dt)
print(strg)  # July 22, 2017

# datetime.strftime
strg = dt.strftime('%B %d, %Y')
print(strg)  # July 22, 2017

# f-strings in python >= 3.6
strg = f'{dt:%B %d, %Y}'
print(strg)  # July 22, 2017

strftime()strptime()Hành vi giải thích ý nghĩa của các chỉ định định dạng.



9

Đối tượng datetime của Python có một thuộc tính phương thức, nó in ở định dạng có thể đọc được.

>>> a = datetime.now()
>>> a.ctime()
'Mon May 21 18:35:18 2018'
>>> 

Đây là một trong những cách tốt nhất, dễ nhất và nhanh nhất để có được DateTime ở định dạng có thể đọc được.
Mujeeb Ishaque

-2

Đây là định dạng ngày?

def format_date(day, month, year):
        # {} betekent 'plaats hier stringvoorstelling van volgend argument'
        return "{}/{}/{}".format(day, month, year)
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.