Chuyển đổi đối tượng datetime thành Chuỗi ngày chỉ trong Python


282

Tôi thấy rất nhiều về việc chuyển đổi một chuỗi ngày thành một datetimeđối tượng trong Python, nhưng tôi muốn đi theo một cách khác.
tôi có

datetime.datetime(2012, 2, 23, 0, 0)

và tôi muốn chuyển đổi nó thành chuỗi như thế nào '2/23/2012'.

Câu trả lời:


487

Bạn có thể sử dụng strftime để giúp bạn định dạng ngày của bạn.

Ví dụ,

import datetime
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')

sẽ mang lại:

'02/23/2012'

Thông tin thêm về định dạng xem tại đây


6
Rất hữu ích cho DateTimeFieldhoặc DateFieldtrong django. Cảm ơn
agejuan

3
sử dụng t = datetime.datetime.now()để sử dụng ngày hiện tại
gizzmole

Theo như tôi có thể nói từ các tài liệu thì không có cách nào để trả về một ngày đệm khác không, tức là '23/2/2012'.
Ron Kalian

183

datedatetimecác đối tượng (và timecũng) hỗ trợ một ngôn ngữ nhỏ để chỉ định đầu ra và có hai cách để truy cập nó:

  • gọi phương thức trực tiếp : dt.strftime('format here'); và
  • phương pháp định dạng mới: '{:format here}'.format(dt)

Vì vậy, ví dụ của bạn có thể trông giống như:

dt.strftime('%m/%d/%Y')

hoặc là

'{:%m/%d/%Y}'.format(dt)

Để hoàn thiện hơn: bạn cũng có thể truy cập trực tiếp các thuộc tính của đối tượng, nhưng sau đó bạn chỉ nhận được các số:

'%s/%s/%s' % (dt.month, dt.day, dt.year)

Thời gian để học ngôn ngữ mini là xứng đáng.


Để tham khảo, đây là các mã được sử dụng trong ngôn ngữ nhỏ:

  • %a Ngày trong tuần như tên viết tắt của miền địa phương.
  • %A Ngày trong tuần như tên đầy đủ của địa phương.
  • %w Ngày trong tuần dưới dạng số thập phân, trong đó 0 là Chủ nhật và 6 là Thứ Bảy.
  • %d Ngày trong tháng dưới dạng số thập phân có đệm.
  • %b Tháng như tên viết tắt của miền địa phương.
  • %B Tháng như tên đầy đủ của địa phương.
  • %m Tháng như một số thập phân không đệm. 01, ..., 12
  • %y Năm không có thế kỷ là một số thập phân không đệm. 00, ..., 99
  • %Y Năm với thế kỷ là một số thập phân. 1970, 1988, 2001, 2013
  • %H Giờ (đồng hồ 24 giờ) dưới dạng số thập phân có đệm. 00, ..., 23
  • %I Giờ (đồng hồ 12 giờ) dưới dạng số thập phân có đệm. 01, ..., 12
  • %p Địa điểm tương đương với AM hoặc PM.
  • %M Phút như một số thập phân không đệm. 00, ..., 59
  • %S Thứ hai là một số thập phân không đệm. 00, ..., 59
  • %f Microsecond như một số thập phân, không đệm ở bên trái. 000000, ..., 999999
  • %z UTC bù ở dạng + HHMM hoặc -HHMM (trống nếu ngây thơ), +0000, -0400, +1030
  • %Z Tên múi giờ (trống nếu ngây thơ), UTC, EST, CST
  • %j Ngày trong năm dưới dạng số thập phân có đệm. 001, ..., 366
  • %U Số tuần trong năm (Chủ nhật là ngày đầu tiên) dưới dạng số thập phân có đệm bằng không.
  • %W Số tuần trong năm (thứ hai là đầu tiên) dưới dạng số thập phân.
  • %c Đại diện ngày và thời gian thích hợp của địa phương.
  • %x Đại diện ngày thích hợp của địa phương.
  • %X Đại diện thời gian thích hợp của địa phương.
  • %% Một ký tự '%' theo nghĩa đen.

29

Một lựa chọn khác:

import datetime
now=datetime.datetime.now()
now.isoformat()
# ouptut --> '2016-03-09T08:18:20.860968'

Mặc dù câu hỏi là về việc "chỉ hẹn hò", tôi đã đến ^ này, cảm ơn. Ngoài ra, để có được chuỗi nhân văn hơn một chút: datetime.datetime.now().ctime()==>'Wed Sep 4 13:12:39 2019'
Denis

13

Bạn có thể sử dụng các phương thức định dạng chuỗi đơn giản:

>>> dt = datetime.datetime(2012, 2, 23, 0, 0)
>>> '{0.month}/{0.day}/{0.year}'.format(dt)
'2/23/2012'
>>> '%s/%s/%s' % (dt.month, dt.day, dt.year)
'2/23/2012'

3
tương tự, bạn có thể làm một cái gì đó như '{:%Y-%m-%d %H:%M}'.format(datetime(2001, 2, 3, 4, 5)). Xem thêm tại pyformat.info
mway


4

Nếu bạn đang tìm kiếm một cách đơn giản datetimeđể chuyển đổi chuỗi và có thể bỏ qua định dạng. Bạn có thể chuyển đổi datetimeđối tượng strvà sau đó sử dụng mảng cắt.

In [1]: from datetime import datetime

In [2]: now = datetime.now()

In [3]: str(now)
Out[3]: '2019-04-26 18:03:50.941332'

In [5]: str(now)[:10]
Out[5]: '2019-04-26'

In [6]: str(now)[:19]
Out[6]: '2019-04-26 18:03:50'

Nhưng lưu ý những điều sau đây. Nếu các giải pháp khác sẽ tăng AttributeErrorkhi biến Nonetrong trường hợp này, bạn sẽ nhận được một 'None'chuỗi.

In [9]: str(None)[:19]
Out[9]: 'None'

3

Có thể chuyển đổi một đối tượng datetime thành một chuỗi bằng cách làm việc trực tiếp với các thành phần của đối tượng datetime.

from datetime import date  

myDate = date.today()    
#print(myDate) would output 2017-05-23 because that is today
#reassign the myDate variable to myDate = myDate.month 
#then you could print(myDate.month) and you would get 5 as an integer
dateStr = str(myDate.month)+ "/" + str(myDate.day) + "/" + str(myDate.year)    
# myDate.month is equal to 5 as an integer, i use str() to change it to a 
# string I add(+)the "/" so now I have "5/" then myDate.day is 23 as
# an integer i change it to a string with str() and it is added to the "5/"   
# to get "5/23" and then I add another "/" now we have "5/23/" next is the 
# year which is 2017 as an integer, I use the function str() to change it to 
# a string and add it to the rest of the string.  Now we have "5/23/2017" as 
# a string. The final line prints the string.

print(dateStr)  

Đầu ra -> 23/5/2017


2

Bạn có thể chuyển đổi datetime thành chuỗi.

published_at = "{}".format(self.published_at)

2

Nối chuỗi str.join, có thể được sử dụng để xây dựng chuỗi.

d = datetime.now()
'/'.join(str(x) for x in (d.month, d.day, d.year))
'3/7/2016'

1

Nếu bạn muốn có thời gian là tốt, chỉ cần đi với

datetime.datetime.now().__str__()

In 2019-07-11 19:36:31.118766trong giao diện điều khiển cho tôi

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.