รับวันที่วันนี้ใน YYYY-MM-DD ใน Python หรือไม่?


326

ฉันกำลังใช้:

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

เพื่อกลับวันที่วันนี้ในYYYY-MM-DDรูปแบบ

มีวิธีหยาบคายน้อยกว่านี้หรือไม่


3
คุณหมายความว่าอะไรกับ "น้ำมันดิบ"
Gombat

4
บางทีนี่อาจ? \ n ตอนนี้ = datetime.datetime.now () \ n str (now.strftime ("Y-% m-% d")
Gombat

3
@Gombat สิ่งที่ผมหมายถึงคือในประสบการณ์ของผมมักจะมีการสร้างขึ้นในวิธีการรับสิ่งที่เราต้องการในหลามโดยไม่ต้องแยกดัชนี concat เข้าร่วม ฯลฯ
Pyderman

คำตอบ:


603

คุณสามารถใช้strftime :

from datetime import datetime

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

นอกจากนี้สำหรับทุกคนที่กำลังมองหาชั่วโมงนาทีและวินาทีที่ไม่มีเบาะรองท้าย: (ความคิดเห็นโดยGabriel Staples )

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

นอกจากนี้ยังมีความเป็นไปได้สูงที่ "% x" จะใช้งานได้ ... แต่นั่นขึ้นอยู่กับสถานที่
Joran Beasley

19
สำหรับใครก็ตามที่กำลังมองหาชั่วโมงนาทีและวินาทีสุดท้ายที่ไม่มีวันสิ้นสุด:datetime.datetime.today().strftime('%Y-%m-%d-%H:%M:%S')
Gabriel Staples

แล้วไงtime.strftime("%Y-%m-%d")ล่ะ
aderchox

สำหรับวันที่ UTC:datetime.utcnow().strftime('%Y-%m-%d')
Agost Biro

เป็นที่น่าสังเกตว่าdateมีให้ใช้เช่นเดียวกับdatetime
dummyDev

116

คุณสามารถใช้datetime.date.today()และแปลงdatetime.dateวัตถุผลลัพธ์เป็นสตริง:

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

เป็นไปได้ไหมที่จะเปลี่ยนตัวคั่นเป็น/?
Stevoisiak

3
@StevenVascellaro มันจะเป็นdate.today().strftime('%Y/%m/%d')
kmonsoor

2
@StevenVascellaro ความคิดที่ไม่ดี ผู้อ่านได้ตามปกติถือว่าคั่น.ที่ 'DMY' คั่น/ไปM/D/Yและแยกไป- แม้ว่าจะไม่ได้ทุกคนปฏิบัติตามแนวทางเหล่านี้ก็จะช่วยให้การอ่านวันสากลตราบใดที่ทุกคนไม่ได้เปลี่ยนไปY-M-D Y-M-D
glglgl

1
@glglgl ฉันกำลังทำงานกับ api ที่ถือว่ารูปแบบวันที่อเมริกัน m / d / y ฉันเปลี่ยนคำสั่งซื้อในใบสมัครแล้ว
Stevoisiak

1
@glglgl ใช่ฉันใช้ m / d / y
Stevoisiak

35

Datetime น่ารักมากถ้าคุณชอบจดจำรหัสตลก ๆ คุณไม่ต้องการความเรียบง่ายใช่ไหม

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

โมดูลนี้ฉลาดพอที่จะเข้าใจความหมายของคุณหมายถึง

แค่ทำ pip install arrowเพียงแค่ทำ

ภาคผนวก: ในคำตอบสำหรับผู้ที่ออกกำลังกายมากกว่าคำตอบนี้ให้ฉันบอกว่าลูกศรแสดงวิธีการทางเลือกหนึ่งในการจัดการกับวันที่ใน Python นั่นคือสิ่งที่ฉันตั้งใจจะแนะนำ


17
สำหรับภารกิจง่าย ๆ เช่นนี้ทำไมต้องใช้ไลบรารีอื่นเมื่อไลบรารีในตัวสามารถทำได้อย่างง่ายดาย แน่นอนว่าหากผู้ใช้ต้องการฟังก์ชั่นที่เกี่ยวข้องกับ {time, date} อื่น ๆ การนำเสนอในไลบรารีใหม่นั้นสมเหตุสมผล
kmonsoor

2
คุณทำให้ฉันหัวเราะในการอ่านบรรทัดที่ 2 ของรหัส มันเป็นยังไงดีกว่าprint(date.today())>> "2018-12-16" ?? lol และรับค่า int ได้อย่างง่ายดายt.year,t.month,t.day+1>> (2018, 12, 17) ที่ไหนt = date.today()และความจริงที่ผู้คนไม่ต้องเรียกลูกศรสีเขียวเพื่อบอกเวลา โอ้พระเจ้านี้เป็นรหัสมากเกินไปที่จะจำ ...
บ่อ

1
@Puddle: เฮฮา
Bill Bell

@kmonsoor เป็นอย่างไรบ้าง import datetimeต่างกันimport arrowอย่างไร แน่นอนว่ามีอยู่แล้วภายใน แต่ถ้าarrowมีรูปแบบที่สะดวกกว่าแล้วทำไมไม่ใช้ล่ะ
information_interchange

1
@information_interchange คุณตอบคำถามของคุณแล้ว ในตัวกับไม่ หากมีคนต้องการสิ่งพิเศษเหล่านั้นแน่นอนว่าทำไมไม่arrow ? แต่สำหรับโครงการที่เรียบง่ายมากมายมันไม่จำเป็นเลย นอกจากนี้ในโครงการภายใน บริษัท หลายแห่ง ppl จำเป็นต้องได้รับการอนุมัติสำหรับการรวมไลบรารีใหม่
kmonsoor

30

ฉันใช้isoformat()ฟังก์ชั่นนี้เสมอ

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

โปรดทราบว่าสิ่งนี้ยังทำงานบนวัตถุ datetime หากคุณต้องการเวลาในรูปแบบมาตรฐานเช่นกัน

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

15

คำตอบอื่น ๆ แนะนำให้ใช้ python datetime.datetimeแต่ในขณะที่ @Bill Bell กล่าวว่ามีห้องสมุดอื่น ๆ ที่ให้บริการdatetimeอินเทอร์เฟซที่ง่ายกว่าไม่ว่าจะเป็นบริการหรือเป็นส่วนหนึ่งของระบบนิเวศขนาดใหญ่ของ API ที่นี่มีห้องสมุดสองแห่งที่ทำงานด้วยกันdatetimesง่ายมาก

นุ่น

คุณสามารถใช้pd.to_datetimeจากห้องสมุดแพนด้า นี่คือตัวเลือกต่าง ๆ ขึ้นอยู่กับสิ่งที่คุณต้องการกลับ

import pandas as pd

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

เป็นวัตถุpython datetime

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

ในฐานะที่เป็นสตริงวันที่จัดรูปแบบ

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'

Timestamp.dateที่จะได้รับเพียงวันจากการประทับเวลาโทร

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

นอกเหนือจากto_datetimeคุณสามารถสร้างอินสแตนซ์ของTimestampวัตถุโดยใช้โดยตรง

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)

หากคุณต้องการให้เขตเวลาประทับเวลาของคุณทราบให้ส่งเขตเวลาไปยังtzอาร์กิวเมนต์

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

ลูกตุ้ม

หากคุณกำลังทำงานกับลูกตุ้มมีบางตัวเลือกที่น่าสนใจ คุณจะได้รับการประทับเวลาปัจจุบันใช้หรือวันที่วันนี้ใช้now()today()

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'))

นอกจากนี้คุณยังสามารถรับtomorrow()หรือyesterday()เดทได้โดยตรงโดยไม่ต้องดำเนินการทางคณิตศาสตร์เพิ่มเติม timedelta

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'))

มีตัวเลือกการจัดรูปแบบที่หลากหลาย

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
ข่าวดีก็มีเหมือนกัน!
ZygD

1
อันนี้ยอดเยี่ยมจริงๆโดยเฉพาะเมื่อคนทำงานกับแพนด้า
loveR

pd.to_datetime (วัน) .date () มีประโยชน์หากคุณใช้แพนด้าและไม่ต้องการแปลงเป็น str ขอบคุณ!
Brndn

4

คำตอบที่ล่าช้ามาก แต่คุณสามารถใช้:

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

1
ขอบคุณนี่เป็นสิ่งที่สะอาดที่สุด
Barbaros Özhan


-5

ฉันชอบสิ่งนี้เพราะมันง่าย แต่อาจไม่มีประสิทธิภาพและมีราคาแพง คุณต้องตรวจสอบรหัสทางออกของคำสั่งเชลล์หากคุณต้องการโปรแกรมที่พิสูจน์ข้อผิดพลาดอย่างยิ่ง

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

4
สิ่งนี้ควรใช้เพื่อจุดประสงค์ในการตรวจสอบสิ่งที่คำสั่ง date ระบบจะกลับมามากกว่าการจัดรูปแบบวันที่จริง นี่คือสาเหตุหลายประการนอกเหนือจากการตรวจสอบรหัสออก 1. ไม่พกพา คำสั่งวันที่บน Windows ตั้งวันที่ 2 ไม่มีประสิทธิภาพ มันจะต้องสร้างเชลล์ทั้งหมดซึ่งจะต้องทำการแยกวิเคราะห์ค้นหาและดำเนินการคำสั่งส่งคืนเอาต์พุตและทำลายเชลล์นั้น 3 มันไม่ไพเราะ - มันแสดงให้เห็นว่าคุณไม่รู้จักไลบรารี่พื้นฐานที่รู้จักกันดีและ อาจทำให้ผู้มาใหม่เข้าใจผิดกับภาษาที่เห็นรหัสนั้น
Captain Lepton
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.