يمكن أن يكون تعلم بايثون هو تلك المساحة الهادئة التي تبدو فيها الأمور منطقية بالفعل. دعني أرشدك عبر شيء عملي للغاية ستستخدمه طوال الوقت: الحصول على بداية ونهاية اليوم في بايثون. صدقني، هذا يظهر أكثر بكثير مما تعتقد.
عندما تبني تطبيقات حقيقية - سواء كانت سكربت بسيطًا لتنظيم ملفات الموسيقى الخاصة بك أو شيئًا أكبر - ستحتاج باستمرار إلى العمل مع التواريخ والأوقات. ربما تريد العثور على جميع السجلات من اليوم، أو حساب المدة التي قضيتها في البرمجة (تنبيه: ربما تكون المدة طويلة جدًا).
الأدوات التي ستستخدمها بالفعل
لدى بايثون وحدة مدمجة تسمى datetime
تتعامل مع كل ما يتعلق بالوقت. إنها مثل امتلاك سكين سويسري جيد حقًا بدلاً من محاولة حساب كل شيء يدويًا.
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}")
بعض السيناريوهات الواقعية التي يهم فيها هذا
تحليل السجلات: "أظهر لي جميع الأخطاء من اليوم"
# 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}")
الآن اذهب وابنِ شيئًا رائعًا باستخدامه!
هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى قدر من الإنتاجية؟
Apidog يلبي جميع متطلباتك، ويحل محل Postman بسعر معقول جدًا!