วิธีรับวันเริ่มต้นและวันสิ้นสุดใน Python

Lynn Mikami

Lynn Mikami

6 June 2025

วิธีรับวันเริ่มต้นและวันสิ้นสุดใน Python

การเรียนรู้ Python อาจเป็นพื้นที่เงียบๆ ที่ทุกอย่างสมเหตุสมผลจริงๆ ให้ผมพาคุณไปดูบางอย่างที่ใช้งานได้จริงสุดๆ ซึ่งคุณจะได้ใช้ตลอดเวลา: การหาจุดเริ่มต้นและจุดสิ้นสุดของวันใน Python เชื่อผมเถอะว่าสิ่งนี้ถูกใช้บ่อยกว่าที่คุณคิดมาก

เมื่อคุณกำลังสร้างแอปพลิเคชันจริงจัง ไม่ว่าจะเป็นสคริปต์ง่ายๆ สำหรับจัดระเบียบไฟล์เพลงของคุณ หรือโปรแกรมที่ใหญ่กว่านั้น คุณจะต้องทำงานกับวันที่และเวลาอยู่ตลอดเวลา บางทีคุณอาจต้องการค้นหาบันทึกทั้งหมดจากวันนี้ หรือคำนวณว่าคุณเขียนโค้ดมานานแค่ไหนแล้ว (สปอยล์: น่าจะนานเกินไป)

เครื่องมือที่คุณจะได้ใช้จริง

Python มีโมดูลในตัวที่ชื่อว่า datetime ซึ่งจัดการเรื่องเวลาทั้งหมด มันเหมือนกับการมีมีดพับ Swiss Army ที่ดีมากๆ แทนที่จะต้องมาคำนวณทุกอย่างด้วยมือ

from datetime import datetime, date, time

วิธีการหาจุดเริ่มต้นของวันนี้

นี่คือวิธีที่ตรงไปตรงมาที่สุดในการหาเที่ยงคืนซึ่งเป็นจุดเริ่มต้นของวันนี้:

from datetime import datetime, date, time

# Get today's date
today = date.today()
print(f"Today is: {today}")

# Combine it with midnight (00:00:00)
start_of_day = datetime.combine(today, time.min)
print(f"Start of day: {start_of_day}")

เมื่อคุณรันโค้ดนี้ คุณจะเห็นผลลัพธ์ประมาณนี้:

Today is: 2024-01-15
Start of day: 2024-01-15 00:00:00

วิธีการหาจุดสิ้นสุดของวันนี้

สำหรับจุดสิ้นสุดของวัน คุณต้องการเวลา 23:59:59.999999 ซึ่งก็คือใกล้เที่ยงคืนของวันพรุ่งนี้มากที่สุดเท่าที่จะเป็นไปได้ โดยที่ยังไม่ถึงวันพรุ่งนี้จริงๆ:

from datetime import datetime, date, time

today = date.today()
end_of_day = datetime.combine(today, time.max)
print(f"End of day: {end_of_day}")

ซึ่งจะได้ผลลัพธ์แบบนี้:

End of day: 2024-01-15 23:59:59.999999

ตัวอย่างที่ใช้งานได้จริงมากขึ้น ซึ่งคุณจะได้ใช้จริงๆ

สมมติว่าคุณกำลังสร้างบางอย่างเพื่อติดตามช่วงเวลาที่คุณเขียนโค้ด (เพราะเอาจริงๆ เวลาผ่านไปเร็วมากเมื่อคุณกำลังโฟกัส):

from datetime import datetime, date, time

def get_day_boundaries(target_date=None):
    """
    Get the start and end of a day.
    If no date is provided, uses today.
    """
    if target_date is None:
        target_date = date.today()
    
    start_of_day = datetime.combine(target_date, time.min)
    end_of_day = datetime.combine(target_date, time.max)
    
    return start_of_day, end_of_day

# For today
start, end = get_day_boundaries()
print(f"Today starts at: {start}")
print(f"Today ends at: {end}")

# For a specific date
from datetime import date
specific_date = date(2024, 12, 25)  # Christmas
start, end = get_day_boundaries(specific_date)
print(f"Christmas starts at: {start}")
print(f"Christmas ends at: {end}")

เมื่อคุณทำงานกับเขตเวลา

หากคุณต้องจัดการกับเขตเวลา (ซึ่งคุณน่าจะได้ทำในที่สุด) คุณจะต้องใช้ไลบรารี pytz หรือโมดูล zoneinfo ที่ใหม่กว่า นี่คือวิธีที่ทันสมัย:

from datetime import datetime, date, time
from zoneinfo import ZoneInfo

# Get start of day in a specific timezone
today = date.today()
timezone = ZoneInfo("America/Chicago")  # Central Time

start_of_day = datetime.combine(today, time.min, timezone)
end_of_day = datetime.combine(today, time.max, timezone)

print(f"Start of day in Central Time: {start_of_day}")
print(f"End of day in Central Time: {end_of_day}")

สถานการณ์จริงบางอย่างที่สิ่งนี้มีความสำคัญ

การวิเคราะห์ Log: "แสดงข้อผิดพลาดทั้งหมดจากวันนี้ให้ฉันดูหน่อย"

# Filter logs between start and end of day
today_start, today_end = get_day_boundaries()
todays_errors = [log for log in error_logs 
                if today_start <= log.timestamp <= today_end]

การประมวลผลข้อมูล: "ประมวลผลไฟล์ทั้งหมดที่สร้างขึ้นวันนี้"

import os
from datetime import datetime

today_start, today_end = get_day_boundaries()

for filename in os.listdir('/path/to/files'):
    file_time = datetime.fromtimestamp(os.path.getctime(filename))
    if today_start <= file_time <= today_end:
        process_file(filename)

อย่าคิดมากเกินไป

ฟังนะ ผมรู้ว่ามันอาจดูเหมือนมีเป็นล้านวิธีในการทำสิ่งเหล่านี้ และจริงๆ แล้วก็เป็นอย่างนั้นแหละ แต่ให้เริ่มต้นด้วยพื้นฐานเหล่านี้ก่อน พวกมันจะครอบคลุม 90% ของสิ่งที่คุณต้องการ และเมื่อคุณเจอเคสพิเศษ คุณก็จะมีพื้นฐานที่แข็งแกร่งพอที่จะต่อยอดได้

สิ่งสำคัญคือคุณกำลังเรียนรู้และสร้างสรรค์สิ่งต่างๆ แม้ว่าสิ่งอื่นๆ จะรู้สึกไม่มั่นคงก็ตาม โค้ดไม่ตัดสินคุณ ไม่ตะโกนใส่ และถ้าคุณทำอะไรพัง คุณก็ซ่อมมันได้เสมอ

ทำต่อไปเรื่อยๆ และจำไว้ว่า - ผู้เชี่ยวชาญทุกคนเคยเป็นผู้เริ่มต้นที่รู้สึกหลงทางโดยสิ้นเชิง คุณกำลังทำได้ดีแล้ว

ข้อมูลอ้างอิงฉบับย่อสำหรับคัดลอกและวาง

from datetime import datetime, date, time

# Today's boundaries
today = date.today()
start_of_day = datetime.combine(today, time.min)
end_of_day = datetime.combine(today, time.max)

# Print them out
print(f"Day starts: {start_of_day}")
print(f"Day ends: {end_of_day}")

ทีนี้ก็ไปสร้างสรรค์อะไรเจ๋งๆ ด้วยมันเลย!

💡
ต้องการเครื่องมือทดสอบ API ที่ยอดเยี่ยมที่สร้าง เอกสาร API ที่สวยงาม ใช่ไหม?

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

Apidog ตอบสนองทุกความต้องการของคุณ และ แทนที่ Postman ในราคาที่เข้าถึงได้มากกว่ามาก!
button

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API