Có được ngày hôm nay trong YYYY-MM-DD bằng Python?


326

Tôi đang sử dụng:

str(datetime.datetime.today()).split()[0]

để trả lại ngày hôm nay trong YYYY-MM-DDđịnh dạng.

Có một cách ít thô thiển hơn để đạt được điều này?


3
Bạn có ý nghĩa gì với "thô"?
Gombat

4
có lẽ điều này? \ n now = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d")
Gombat

3
@Gombat Ý tôi là theo kinh nghiệm của tôi, thường có cách xây dựng để có được thứ chúng ta muốn trong Python mà không phải phân tách, lập chỉ mục, concat, tham gia, v.v.
Pyderman

Câu trả lời:


604

Bạn có thể sử dụng strftime :

from datetime import datetime

datetime.today().strftime('%Y-%m-%d')

Ngoài ra, đối với bất kỳ ai cũng đang tìm kiếm Giờ, phút và giây không có đệm ở cuối: (Nhận xét của Gabriel Staples )

datetime.today().strftime('%Y-%m-%d-%H:%M:%S')

cũng có khả năng lớn là "% x" sẽ hoạt động ... nhưng đó là phụ thuộc vào địa phương
Joran Beasley

19
Đối với bất cứ ai cũng đang tìm kiếm Giờ, phút và giây không có đệm vào cuối:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples

thế còn time.strftime("%Y-%m-%d")?
aderchox

Đối với ngày UTC:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro

Đáng chú ý là datecó sẵn điều này cũng nhưdatetime
dummyDev

116

Bạn có thể sử dụng datetime.date.today()và chuyển đổi datetime.dateđối tượng kết quả thành một chuỗi:

from datetime import date
today = str(date.today())
print(today)   # '2017-12-26'

Có thể thay đổi dấu phân cách thành /?
Stevoisiak

3
@StevenVascellaro sẽ làdate.today().strftime('%Y/%m/%d')
kmonsoor

2
@StevenVascellaro Ý tưởng tồi. Người đọc thường giả định tách .để 'DMY', tách /để M/D/Yvà tách -để Y-M-D. Mặc dù không phải ai cũng tuân theo những nguyên tắc này, nhưng nó sẽ giúp đọc ngày quốc tế miễn là không phải ai cũng chuyển sang Y-M-D.
glglgl

1
@glglgl Tôi đang làm việc với một api giả định định dạng ngày ở Mỹ m / d / y. Tôi đã thay đổi thứ tự trong ứng dụng của mình.
Stevoisiak

1
@glglgl Có, tôi đang sử dụng m / d / y
Stevoisiak

35

Datetime chỉ đáng yêu nếu bạn thích nhớ các mã vui nhộn. Bạn có thích sự đơn giản không?

>>> import arrow
>>> arrow.now().format('YYYY-MM-DD')
'2017-02-17'

Module này là đủ thông minh để hiểu những gì bạn có nghĩa .

Cứ làm đi pip install arrow.

Phụ lục: Để trả lời cho những người thực hiện câu trả lời này, tôi chỉ nói rằng mũi tên đại diện cho một trong những cách tiếp cận khác để xử lý ngày trong Python. Đó chủ yếu là những gì tôi muốn đề xuất.


17
Đối với một tác vụ đơn giản như thế này, tại sao sử dụng thư viện khác khi thư viện tích hợp có thể thực hiện đơn giản. Tất nhiên, nếu người dùng cần vô số các hàm liên quan đến {thời gian, ngày} khác, việc mang vào một thư viện mới có ý nghĩa.
kmonsoor

2
bạn làm tôi cười khi đọc dòng mã thứ 2 đó. Làm thế nào tốt hơn print(date.today())>> "2018-12-16" ?? lol và dễ dàng nhận được các giá trị int t.year,t.month,t.day+1>> (2018, 12, 17) ở đâu t = date.today()và thực tế mọi người không phải gọi mũi tên màu xanh lá cây để cho họ biết thời gian. trời ơi, đây là quá nhiều mã để nhớ ...
Puddle

1
@Puddle: Vui nhộn.
Bill Bell

@kmonsoor thế nào là import datetimekhác nhau hơn import arrow? Chắc chắn một cái được tích hợp sẵn, nhưng nếu arrowcung cấp một định dạng thuận tiện hơn, thì tại sao không sử dụng nó?
information_interchange

1
@in information_interchange bạn đã trả lời câu hỏi của bạn. Tích hợp vs không. Nếu ai đó cần những thứ bổ sung, chắc chắn, tại sao không arrow? Nhưng, đối với nhiều dự án đơn giản, nó không cần thiết. Ngoài ra, trong nhiều dự án nội bộ công ty, ppl cần phải được chấp thuận để bao gồm các thư viện mới.
kmonsoor

30

Tôi luôn luôn sử dụng isoformat()chức năng cho việc này.

from datetime import date    
today = date.today().isoformat()
print(today) # '2018-12-05'

Lưu ý rằng điều này cũng hoạt động trên các đối tượng datetime nếu bạn cũng cần thời gian ở định dạng tiêu chuẩn.

from datetime import datetime
now = datetime.today().isoformat()
print(now) # '2018-12-05T11:15:55.126382'

15

Các câu trả lời khác đề nghị sử dụng python datetime.datetime, nhưng như @Bill Bell nói, có những thư viện khác cung cấp datetimegiao diện đơn giản hơn như một dịch vụ hoặc là một phần của hệ sinh thái API lớn hơn. Đây là hai thư viện như vậy làm cho datetimesrất đơn giản.

PANDAS

Bạn có thể sử dụng pd.to_datetimetừ thư viện gấu trúc . Dưới đây là các tùy chọn khác nhau, tùy thuộc vào những gì bạn muốn trả lại.

import pandas as pd

pd.to_datetime('today')  # pd.to_datetime('now')
# Timestamp('2019-03-27 00:00:10.958567')

Là một đối tượng datetime python ,

pd.to_datetime('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 50, 42, 587629)

Là một chuỗi ngày được định dạng,

pd.to_datetime('today').isoformat()
# '2019-04-18T04:03:32.493337'

# Or, `strftime` for custom formats.
pd.to_datetime('today').strftime('%Y-%m-%d')
# '2019-03-27'

Để chỉ nhận được ngày từ dấu thời gian, hãy gọi Timestamp.date.

pd.to_datetime('today').date()
# datetime.date(2019, 3, 27)

Ngoài ra to_datetime, bạn có thể khởi tạo trực tiếp một Timestampđối tượng bằng cách sử dụng,

pd.Timestamp('today')  # pd.Timestamp('now')
# Timestamp('2019-04-18 03:43:33.233093')

pd.Timestamp('today').to_pydatetime()
# datetime.datetime(2019, 4, 18, 3, 53, 46, 220068)

Nếu bạn muốn làm cho múi giờ Timestamp của bạn nhận biết, hãy chuyển múi giờ cho tzđối số.

pd.Timestamp('now', tz='America/Los_Angeles')
# Timestamp('2019-04-18 03:59:02.647819-0700', tz='America/Los_Angeles')

PENDULUM

Nếu bạn đang làm việc với con lắc , có một số lựa chọn thú vị. Bạn có thể lấy dấu thời gian hiện tại bằng cách sử dụng now()hoặc ngày hôm nay bằng cách sử dụngtoday() .

import pendulum 

pendulum.now()
# DateTime(2019, 3, 27, 0, 2, 41, 452264, tzinfo=Timezone('America/Los_Angeles'))

pendulum.today()
# DateTime(2019, 3, 27, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

Ngoài ra, bạn cũng có thể nhận được tomorrow()hoặcyesterday() trực tiếp ngày mà không phải thực hiện bất kỳ số học timedelta bổ sung.

pendulum.yesterday()
# DateTime(2019, 3, 26, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

pendulum.tomorrow()
# DateTime(2019, 3, 28, 0, 0, 0, tzinfo=Timezone('America/Los_Angeles'))

Có nhiều tùy chọn định dạng có sẵn.

pendulum.now().to_date_string()
# '2019-03-27'

pendulum.now().to_formatted_date_string()
# 'Mar 27, 2019'

pendulum.now().to_day_datetime_string()
# 'Wed, Mar 27, 2019 12:04 AM'

3
Gấu trúc tin tức tuyệt vời có nó quá!
ZygD

1
Điều này thực sự tuyệt vời, đặc biệt khi một người làm việc trên gấu trúc
loveR

pd.to_datetime (day) .date () rất hữu ích nếu bạn đang sử dụng gấu trúc và không muốn chuyển đổi thành str. Cảm ơn!
Brndn

4

Câu trả lời rất muộn, nhưng bạn có thể sử dụng:

import time
today = time.strftime("%Y-%m-%d")
# 2020-02-14

1
cảm ơn bạn, đây là cái sạch nhất
Barbaros Özhan


-5

Tôi thích điều này, bởi vì điều này là đơn giản, nhưng có lẽ bằng cách nào đó không hiệu quả và lỗi. Bạn phải kiểm tra mã thoát của lệnh shell nếu bạn muốn chương trình chống lỗi mạnh .

os.system('date +%Y-%m-%d')

4
Điều này chỉ được sử dụng cho mục đích kiểm tra lệnh ngày hệ thống sẽ trả về, thay vì thực sự định dạng một ngày. Điều này là vì nhiều lý do ngoài việc kiểm tra mã thoát. 1. Không xách tay. Lệnh date trên Windows đặt ngày 2. Không hiệu quả. Nó phải tạo ra toàn bộ shell, sau đó phải phân tích cú pháp, tìm và thực thi lệnh, trả lại đầu ra và sau đó hủy shell đó. Nó đơn giản là unpythonic - nó cho thấy rằng bạn không biết các thư viện cơ bản nổi tiếng và cũng có thể đánh lừa những người mới đến ngôn ngữ nhìn thấy mã đó
Thuyền trưởng Lepton
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.