🎯 Exemples recommandés
Balanced sample collections from various categories for you to explore
Exemples de Date et Heure Web Python
Exemples de date et heure Web Python incluant l'obtention de l'heure actuelle, le formatage, l'analyse et les opérations de fuseau horaire
💻 Obtenir l'Heure Actuelle python
🟢 simple
⭐⭐
Obtenir la date et l'heure système actuelles en utilisant les modules datetime et time avec divers niveaux de précision
⏱️ 20 min
🏷️ python, web, datetime, time
Prerequisites:
Basic Python, datetime module
# Web Python Get Current Time Examples
# Getting current system time and date with various precision
# 1. Basic Current Time
from datetime import datetime, date, time, timezone
from time import time as time_time, time_ns, ctime, localtime, gmtime, strftime
import time
def get_current_datetime() -> datetime:
"""
Get current date and time
Returns:
Current datetime object
"""
return datetime.now()
def get_current_date() -> date:
"""
Get current date only
Returns:
Current date object
"""
return date.today()
def get_current_time() -> time:
"""
Get current time only
Returns:
Current time object
"""
return datetime.now().time()
def get_current_timestamp() -> float:
"""
Get current Unix timestamp
Returns:
Timestamp as float
"""
return time.time()
def get_current_timestamp_ns() -> int:
"""
Get current Unix timestamp in nanoseconds
Returns:
Timestamp as integer (nanoseconds)
"""
return time.time_ns()
# 2. Time with Timezone
def get_utc_now() -> datetime:
"""
Get current UTC time
Returns:
Current UTC datetime
"""
return datetime.now(timezone.utc)
def get_current_timezone() -> datetime:
"""
Get current time with local timezone
Returns:
Current datetime with local timezone
"""
return datetime.now().astimezone()
def get_timezone_offset() -> int:
"""
Get local timezone offset in seconds
Returns:
Offset in seconds
"""
return time.timezone if time.daylight == 0 else time.altzone
def get_timezone_name() -> str:
"""
Get local timezone name
Returns:
Timezone name
"""
return time.tzname[time.daylight]
# 3. High Precision Time
def get_high_precision_time() -> float:
"""
Get time with high precision
Returns:
Time as float (seconds since epoch)
"""
return time_time()
def get_monotonic_time() -> float:
"""
Get monotonic time (cannot go backwards)
Returns:
Monotonic clock time
"""
return time.monotonic()
def get_perf_counter() -> float:
"""
Get performance counter time (highest resolution)
Returns:
Performance counter time
"""
return time.perf_counter()
def get_process_time() -> float:
"""
Get process CPU time
Returns:
Process CPU time
"""
return time.process_time()
def get_thread_time() -> float:
"""
Get thread CPU time
Returns:
Thread CPU time
"""
return time.thread_time()
# 4. Time Components
def get_current_year() -> int:
"""Get current year"""
return datetime.now().year
def get_current_month() -> int:
"""Get current month (1-12)"""
return datetime.now().month
def get_current_day() -> int:
"""Get current day of month (1-31)"""
return datetime.now().day
def get_current_hour() -> int:
"""Get current hour (0-23)"""
return datetime.now().hour
def get_current_minute() -> int:
"""Get current minute (0-59)"""
return datetime.now().minute
def get_current_second() -> int:
"""Get current second (0-59)"""
return datetime.now().second
def get_current_microsecond() -> int:
"""Get current microsecond (0-999999)"""
return datetime.now().microsecond
def get_time_components() -> dict:
"""
Get all time components as dictionary
Returns:
Dictionary with all components
"""
now = datetime.now()
return {
'year': now.year,
'month': now.month,
'day': now.day,
'hour': now.hour,
'minute': now.minute,
'second': now.second,
'microsecond': now.microsecond,
'weekday': now.weekday(),
'iso_weekday': now.isoweekday()
}
# 5. Week and Day Information
def get_current_weekday() -> int:
"""
Get current weekday (0=Monday, 6=Sunday)
Returns:
Weekday number
"""
return datetime.now().weekday()
def get_current_iso_weekday() -> int:
"""
Get current ISO weekday (1=Monday, 7=Sunday)
Returns:
ISO weekday number
"""
return datetime.now().isoweekday()
def get_week_of_year() -> int:
"""
Get current week of year
Returns:
Week number (1-53)
"""
return datetime.now().isocalendar()[1]
def get_day_of_year() -> int:
"""
Get current day of year
Returns:
Day of year (1-366)
"""
return datetime.now().timetuple().tm_yday
def get_weekday_name() -> str:
"""
Get current weekday name
Returns:
Weekday name (e.g., 'Monday')
"""
return datetime.now().strftime('%A')
def get_month_name() -> str:
"""
Get current month name
Returns:
Month name (e.g., 'January')
"""
return datetime.now().strftime('%B')
def get_weekday_name_abbreviated() -> str:
"""
Get abbreviated weekday name
Returns:
Abbreviated weekday name (e.g., 'Mon')
"""
return datetime.now().strftime('%a')
def get_month_name_abbreviated() -> str:
"""
Get abbreviated month name
Returns:
Abbreviated month name (e.g., 'Jan')
"""
return datetime.now().strftime('%b')
# 6. Time Strings
def get_time_string() -> str:
"""
Get current time as string
Returns:
Time string (HH:MM:SS)
"""
return datetime.now().strftime('%H:%M:%S')
def get_date_string() -> str:
"""
Get current date as string
Returns:
Date string (YYYY-MM-DD)
"""
return datetime.now().strftime('%Y-%m-%d')
def get_datetime_string() -> str:
"""
Get current datetime as string
Returns:
DateTime string (YYYY-MM-DD HH:MM:SS)
"""
return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
def get_iso_datetime() -> str:
"""
Get ISO 8601 formatted datetime
Returns:
ISO formatted string
"""
return datetime.now().isoformat()
def get_ctime_string() -> str:
"""
Get ctime formatted string
Returns:
Ctime string
"""
return ctime()
def get_custom_format(format_string: str) -> str:
"""
Get time with custom format
Args:
format_string: Format string
Returns:
Formatted time string
"""
return datetime.now().strftime(format_string)
# 7. Relative Time
def get_time_since_epoch() -> float:
"""
Get seconds since Unix epoch
Returns:
Seconds since epoch
"""
return time.time()
def get_time_until_midnight() -> float:
"""
Get seconds until midnight
Returns:
Seconds until midnight
"""
now = datetime.now()
midnight = datetime.now().replace(hour=23, minute=59, second=59)
return (midnight - now).total_seconds()
def get_time_since_midnight() -> float:
"""
Get seconds since midnight
Returns:
Seconds since midnight
"""
now = datetime.now()
midnight = now.replace(hour=0, minute=0, second=0, microsecond=0)
return (now - midnight).total_seconds()
def get_days_in_month() -> int:
"""
Get number of days in current month
Returns:
Days in month
"""
from calendar import monthrange
now = datetime.now()
return monthrange(now.year, now.month)[1]
def is_leap_year() -> bool:
"""
Check if current year is leap year
Returns:
True if leap year
"""
from calendar import isleap
return isleap(datetime.now().year)
# 8. Multiple Time Representations
def get_all_time_formats() -> dict:
"""
Get time in all common formats
Returns:
Dictionary with various formats
"""
now = datetime.now()
return {
'iso': now.isoformat(),
'timestamp': time.time(),
'ctime': ctime(),
'date': get_date_string(),
'time': get_time_string(),
'datetime': get_datetime_string(),
'year': now.year,
'month': now.month,
'day': now.day,
'hour': now.hour,
'minute': now.minute,
'second': now.second
}
# 9. Time Measurements
def measure_time_start() -> float:
"""
Start time measurement
Returns:
Start time
"""
return time.perf_counter()
def measure_time_end(start_time: float) -> float:
"""
End time measurement
Args:
start_time: Start time from measure_time_start
Returns:
Elapsed time in seconds
"""
return time.perf_counter() - start_time
# Usage Examples
def demonstrate_get_current_time():
print("=== Web Python Get Current Time Examples ===\n")
# 1. Basic time
print("--- 1. Basic Current Time ---")
print(f"Current datetime: {get_current_datetime()}")
print(f"Current date: {get_current_date()}")
print(f"Current time: {get_current_time()}")
print(f"Unix timestamp: {get_current_timestamp()}")
print(f"Timestamp (ns): {get_current_timestamp_ns()}")
# 2. Timezone
print("\n--- 2. Timezone Information ---")
print(f"UTC now: {get_utc_now()}")
print(f"Local timezone: {get_current_timezone()}")
print(f"Timezone offset: {get_timezone_offset()} seconds")
print(f"Timezone name: {get_timezone_name()}")
# 3. High precision
print("\n--- 3. High Precision Time ---")
print(f"High precision: {get_high_precision_time()}")
print(f"Monotonic: {get_monotonic_time()}")
print(f"Perf counter: {get_perf_counter()}")
print(f"Process time: {get_process_time()}")
# 4. Components
print("\n--- 4. Time Components ---")
print(f"Time components: {get_time_components()}")
# 5. Week/Day info
print("\n--- 5. Week and Day Information ---")
print(f"Weekday (0=Mon): {get_current_weekday()}")
print(f"ISO weekday (1=Mon): {get_current_iso_weekday()}")
print(f"Week of year: {get_week_of_year()}")
print(f"Day of year: {get_day_of_year()}")
print(f"Weekday name: {get_weekday_name()}")
print(f"Month name: {get_month_name()}")
# 6. String formats
print("\n--- 6. String Formats ---")
print(f"Time string: {get_time_string()}")
print(f"Date string: {get_date_string()}")
print(f"DateTime string: {get_datetime_string()}")
print(f"ISO format: {get_iso_datetime()}")
print(f"Custom format: {get_custom_format('%d/%m/%Y %H:%M')}")
# 7. Relative time
print("\n--- 7. Relative Time ---")
print(f"Until midnight: {get_time_until_midnight():.0f} seconds")
print(f"Since midnight: {get_time_since_midnight():.0f} seconds")
print(f"Days in month: {get_days_in_month()}")
print(f"Is leap year: {is_leap_year()}")
# 8. All formats
print("\n--- 8. All Formats ---")
all_formats = get_all_time_formats()
for key, value in all_formats.items():
print(f"{key}: {value}")
# 9. Time measurement
print("\n--- 9. Time Measurement ---")
start = measure_time_start()
time.sleep(0.1) # Simulate work
elapsed = measure_time_end(start)
print(f"Elapsed time: {elapsed:.3f} seconds")
print("\n=== All Get Current Time Examples Completed ===")
# Export functions
export { get_current_datetime, get_current_date, get_current_time }
export { get_current_timestamp, get_current_timestamp_ns }
export { get_utc_now, get_current_timezone, get_timezone_offset, get_timezone_name }
export { get_high_precision_time, get_monotonic_time, get_perf_counter }
export { get_process_time, get_thread_time }
export { get_current_year, get_current_month, get_current_day }
export { get_current_hour, get_current_minute, get_current_second, get_current_microsecond }
export { get_time_components }
export { get_current_weekday, get_current_iso_weekday, get_week_of_year, get_day_of_year }
export { get_weekday_name, get_month_name, get_weekday_name_abbreviated, get_month_name_abbreviated }
export { get_time_string, get_date_string, get_datetime_string, get_iso_datetime }
export { get_ctime_string, get_custom_format }
export { get_time_since_epoch, get_time_until_midnight, get_time_since_midnight }
export { get_days_in_month, is_leap_year }
export { get_all_time_formats }
export { measure_time_start, measure_time_end }
export { demonstrate_get_current_time }
💻 Formatage de l'Heure python
🟡 intermediate
⭐⭐⭐
Formater les objets datetime en chaînes en utilisant divers codes de format et modèles personnalisés
⏱️ 25 min
🏷️ python, web, datetime, formatting
Prerequisites:
Intermediate Python, datetime module, strftime
# Web Python Time Formatting Examples
# Converting datetime objects to formatted strings
# 1. Standard Format Codes
from datetime import datetime, date, time
from typing import Optional
def format_year(dt: datetime) -> str:
"""Format year (YYYY or YY)"""
return {
'full': dt.strftime('%Y'),
'short': dt.strftime('%y'),
'iso': dt.isoformat()
}
def format_month(dt: datetime) -> dict:
"""
Format month in various ways
Args:
dt: Datetime object
Returns:
Dictionary with various formats
"""
return {
'numeric': dt.strftime('%m'),
'numeric_zero': dt.strftime('%-m'),
'name': dt.strftime('%B'),
'name_abbrev': dt.strftime('%b')
}
def format_day(dt: datetime) -> dict:
"""
Format day in various ways
Args:
dt: Datetime object
Returns:
Dictionary with various formats
"""
return {
'numeric': dt.strftime('%d'),
'numeric_space': dt.strftime('%e'),
'with_ordinal': str(dt.day) + ('th' if 11 <= dt.day <= 13 else {1:'st', 2:'nd', 3:'rd'}.get(dt.day % 10, 'th')),
'name': dt.strftime('%A'),
'name_abbrev': dt.strftime('%a')
}
def format_time(dt: datetime) -> dict:
"""
Format time in various ways
Args:
dt: Datetime object
Returns:
Dictionary with various formats
"""
return {
'24h': dt.strftime('%H:%M:%S'),
'12h': dt.strftime('%I:%M:%S %p'),
'24h_short': dt.strftime('%H:%M'),
'12h_short': dt.strftime('%I:%M %p'),
'hour_24': dt.strftime('%H'),
'hour_12': dt.strftime('%I'),
'minute': dt.strftime('%M'),
'second': dt.strftime('%S'),
'period': dt.strftime('%p')
}
# 2. Common Date Formats
def format_iso8601(dt: datetime) -> str:
"""
Format as ISO 8601
Args:
dt: Datetime object
Returns:
ISO 8601 string
"""
return dt.isoformat()
def format_rfc2822(dt: datetime) -> str:
"""
Format as RFC 2822 (email format)
Args:
dt: Datetime object
Returns:
RFC 2822 string
"""
return dt.strftime('%a, %d %b %Y %H:%M:%S %z')
def format_rfc3339(dt: datetime) -> str:
"""
Format as RFC 3339
Args:
dt: Datetime object
Returns:
RFC 3339 string
"""
return dt.strftime('%Y-%m-%dT%H:%M:%S%z')
def format_http_date(dt: datetime) -> str:
"""
Format as HTTP date
Args:
dt: Datetime object
Returns:
HTTP date string
"""
return dt.strftime('%a, %d %b %Y %H:%M:%S GMT')
# 3. Regional Formats
def format_us_date(dt: datetime) -> str:
"""
Format as US date (MM/DD/YYYY)
Args:
dt: Datetime object
Returns:
US format date
"""
return dt.strftime('%m/%d/%Y')
def format_eu_date(dt: datetime) -> str:
"""
Format as European date (DD/MM/YYYY)
Args:
dt: Datetime object
Returns:
European format date
"""
return dt.strftime('%d/%m/%Y')
def format_iso_date(dt: datetime) -> str:
"""
Format as ISO date (YYYY-MM-DD)
Args:
dt: Datetime object
Returns:
ISO format date
"""
return dt.strftime('%Y-%m-%d')
def format_chinese_date(dt: datetime) -> str:
"""
Format as Chinese date (YYYY年MM月DD日)
Args:
dt: Datetime object
Returns:
Chinese format date
"""
return dt.strftime('%Y年%m月%d日')
def format_japanese_date(dt: datetime) -> str:
"""
Format as Japanese date (YYYY年MM月DD日)
Args:
dt: Datetime object
Returns:
Japanese format date
"""
return dt.strftime('%Y年%m月%d日')
# 4. Custom Formats
def format_readable(dt: datetime) -> str:
"""
Format in human-readable form
Args:
dt: Datetime object
Returns:
Readable string
"""
return dt.strftime('%A, %B %d, %Y at %I:%M %p')
def format_compact(dt: datetime) -> str:
"""
Format in compact form
Args:
dt: Datetime object
Returns:
Compact string
"""
return dt.strftime('%Y%m%d_%H%M%S')
def format_with_timezone(dt: datetime) -> str:
"""
Format with timezone info
Args:
dt: Datetime object
Returns:
String with timezone
"""
return dt.strftime('%Y-%m-%d %H:%M:%S %Z')
def format_friendly(dt: datetime) -> str:
"""
Format in friendly form
Args:
dt: Datetime object
Returns:
Friendly string
"""
now = datetime.now()
diff = (now - dt).total_seconds()
if diff < 60:
return 'just now'
elif diff < 3600:
minutes = int(diff / 60)
return f'{minutes} minute{"s" if minutes > 1 else ""} ago'
elif diff < 86400:
hours = int(diff / 3600)
return f'{hours} hour{"s" if hours > 1 else ""} ago'
elif diff < 604800:
days = int(diff / 86400)
return f'{days} day{"s" if days > 1 else ""} ago'
else:
return dt.strftime('%Y-%m-%d')
# 5. Time Formatting
def format_duration(seconds: float) -> str:
"""
Format duration in human-readable form
Args:
seconds: Duration in seconds
Returns:
Formatted duration
"""
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = int(seconds % 60)
if hours > 0:
return f'{hours}h {minutes}m {secs}s'
elif minutes > 0:
return f'{minutes}m {secs}s'
else:
return f'{secs}s'
def format_duration_precise(seconds: float) -> str:
"""
Format duration with milliseconds
Args:
seconds: Duration in seconds
Returns:
Formatted duration with ms
"""
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = int(seconds % 60)
millis = int((seconds % 1) * 1000)
if hours > 0:
return f'{hours}h {minutes}m {secs}s {millis}ms'
elif minutes > 0:
return f'{minutes}m {secs}s {millis}ms'
else:
return f'{secs}s {millis}ms'
# 6. Relative Formatting
def format_relative_to_now(dt: datetime) -> str:
"""
Format datetime relative to now
Args:
dt: Datetime object
Returns:
Relative time string
"""
now = datetime.now()
diff = dt - now if dt > now else now - dt
seconds = diff.total_seconds()
future = dt > now
if seconds < 60:
amount = int(seconds)
unit = 'second'
elif seconds < 3600:
amount = int(seconds / 60)
unit = 'minute'
elif seconds < 86400:
amount = int(seconds / 3600)
unit = 'hour'
elif seconds < 2592000:
amount = int(seconds / 86400)
unit = 'day'
elif seconds < 31536000:
amount = int(seconds / 2592000)
unit = 'month'
else:
amount = int(seconds / 31536000)
unit = 'year'
plural = 's' if amount > 1 else ''
direction = 'in' if future else 'ago'
return f'{amount} {unit}{plural} {direction}'
# 7. Business Date Formats
def format_quarter(dt: datetime) -> str:
"""
Format as quarter
Args:
dt: Datetime object
Returns:
Quarter string
"""
quarter = (dt.month - 1) // 3 + 1
return f'Q{quarter} {dt.year}'
def format_week_number(dt: datetime) -> str:
"""
Format with week number
Args:
dt: Datetime object
Returns:
Week string
"""
return dt.strftime('%Y-W%W')
def format_day_of_year(dt: datetime) -> str:
"""
Format with day of year
Args:
dt: Datetime object
Returns:
Day of year string
"""
return dt.strftime(f'%Y-{dt.timetuple().tm_yday:03d}')
# 8. Locale-Aware Formatting
def format_with_locale(dt: datetime, locale: str = 'en_US') -> str:
"""
Format using locale settings
Args:
dt: Datetime object
locale: Locale string
Returns:
Localized format
"""
import locale
try:
locale.setlocale(locale.LC_TIME, locale)
formatted = dt.strftime('%c')
locale.setlocale(locale.LC_TIME, '') # Reset
return formatted
except:
return dt.strftime('%c')
# 9. Format Validation
def validate_format(format_string: str) -> bool:
"""
Validate format string
Args:
format_string: Format string to validate
Returns:
True if valid
"""
try:
datetime.now().strftime(format_string)
return True
except:
return False
def get_all_format_codes() -> dict:
"""
Get all format codes with examples
Returns:
Dictionary of format codes
"""
now = datetime(2025, 12, 31, 14, 30, 45)
return {
'Year': {
'%Y': now.strftime('%Y'), # 2025
'%y': now.strftime('%y') # 25
},
'Month': {
'%m': now.strftime('%m'), # 12
'%B': now.strftime('%B'), # December
'%b': now.strftime('%b'), # Dec
},
'Day': {
'%d': now.strftime('%d'), # 31
'%A': now.strftime('%A'), # Wednesday
'%a': now.strftime('%a'), # Wed
},
'Time': {
'%H': now.strftime('%H'), # 14
'%I': now.strftime('%I'), # 02
'%M': now.strftime('%M'), # 30
'%S': now.strftime('%S'), # 45
'%p': now.strftime('%p'), # PM
}
}
# Usage Examples
def demonstrate_time_formatting():
print("=== Web Python Time Formatting Examples ===\n")
now = datetime.now()
# 1. Standard formats
print("--- 1. Standard Format Codes ---")
print(f"Month formats: {format_month(now)}")
print(f"Day formats: {format_day(now)}")
print(f"Time formats: {format_time(now)}")
# 2. Common formats
print("\n--- 2. Common Date Formats ---")
print(f"ISO 8601: {format_iso8601(now)}")
print(f"RFC 2822: {format_rfc2822(now)}")
print(f"RFC 3339: {format_rfc3339(now)}")
print(f"HTTP date: {format_http_date(now)}")
# 3. Regional formats
print("\n--- 3. Regional Formats ---")
print(f"US: {format_us_date(now)}")
print(f"EU: {format_eu_date(now)}")
print(f"ISO: {format_iso_date(now)}")
print(f"Chinese: {format_chinese_date(now)}")
print(f"Japanese: {format_japanese_date(now)}")
# 4. Custom formats
print("\n--- 4. Custom Formats ---")
print(f"Readable: {format_readable(now)}")
print(f"Compact: {format_compact(now)}")
print(f"With timezone: {format_with_timezone(now)}")
print(f"Friendly: {format_friendly(now)}")
# 5. Duration formatting
print("\n--- 5. Duration Formatting ---")
print(f"3661 seconds: {format_duration(3661)}")
print(f"123.456 seconds: {format_duration_precise(123.456)}")
# 6. Relative formatting
print("\n--- 6. Relative Formatting ---")
future = datetime(2025, 12, 31, 23, 59, 59)
print(f"Relative to future: {format_relative_to_now(future)}")
past = datetime(2025, 1, 1, 0, 0, 0)
print(f"Relative to past: {format_relative_to_now(past)}")
# 7. Business formats
print("\n--- 7. Business Date Formats ---")
print(f"Quarter: {format_quarter(now)}")
print(f"Week number: {format_week_number(now)}")
print(f"Day of year: {format_day_of_year(now)}")
# 8. Format codes reference
print("\n--- 8. Format Codes Reference ---")
codes = get_all_format_codes()
for category, items in codes.items():
print(f"\n{category}:")
for code, example in items.items():
print(f" {code}: {example}")
print("\n=== All Time Formatting Examples Completed ===")
# Export functions
export { format_year, format_month, format_day, format_time }
export { format_iso8601, format_rfc2822, format_rfc3339, format_http_date }
export { format_us_date, format_eu_date, format_iso_date, format_chinese_date, format_japanese_date }
export { format_readable, format_compact, format_with_timezone, format_friendly }
export { format_duration, format_duration_precise }
export { format_relative_to_now }
export { format_quarter, format_week_number, format_day_of_year }
export { format_with_locale }
export { validate_format, get_all_format_codes }
export { demonstrate_time_formatting }
💻 Analyse de l'Heure python
🟡 intermediate
⭐⭐⭐
Analyser les chaînes en objets datetime en utilisant divers formats et gérer les erreurs d'analyse
⏱️ 25 min
🏷️ python, web, datetime, parsing
Prerequisites:
Intermediate Python, datetime module, strptime
# Web Python Time Parsing Examples
# Converting strings to datetime objects with various formats
# 1. Basic Parsing
from datetime import datetime
from typing import Optional, List
import re
def parse_iso8601(date_string: str) -> Optional[datetime]:
"""
Parse ISO 8601 format
Args:
date_string: ISO format string
Returns:
Datetime object or None
"""
try:
return datetime.fromisoformat(date_string)
except:
return None
def parse_rfc2822(date_string: str) -> Optional[datetime]:
"""
Parse RFC 2822 format
Args:
date_string: RFC 2822 format string
Returns:
Datetime object or None
"""
try:
from email.utils import parsedate_to_datetime
return parsedate_to_datetime(date_string)
except:
return None
def parse_custom_format(date_string: str, format_string: str) -> Optional[datetime]:
"""
Parse using custom format
Args:
date_string: Date string
format_string: Format string
Returns:
Datetime object or None
"""
try:
return datetime.strptime(date_string, format_string)
except:
return None
# 2. Common Format Parsing
def parse_us_date(date_string: str) -> Optional[datetime]:
"""
Parse US date (MM/DD/YYYY)
Args:
date_string: US format date
Returns:
Datetime object or None
"""
formats = [
'%m/%d/%Y',
'%m/%d/%y',
'%m-%d-%Y',
'%m-%d-%y'
]
for fmt in formats:
result = parse_custom_format(date_string, fmt)
if result:
return result
return None
def parse_eu_date(date_string: str) -> Optional[datetime]:
"""
Parse European date (DD/MM/YYYY)
Args:
date_string: EU format date
Returns:
Datetime object or None
"""
formats = [
'%d/%m/%Y',
'%d/%m/%y',
'%d-%m-%Y',
'%d-%m-%y'
]
for fmt in formats:
result = parse_custom_format(date_string, fmt)
if result:
return result
return None
def parse_iso_date(date_string: str) -> Optional[datetime]:
"""
Parse ISO date (YYYY-MM-DD)
Args:
date_string: ISO format date
Returns:
Datetime object or None
"""
formats = [
'%Y-%m-%d',
'%Y%m%d',
'%Y-%m-%d %H:%M:%S',
'%Y-%m-%dT%H:%M:%S'
]
for fmt in formats:
result = parse_custom_format(date_string, fmt)
if result:
return result
return None
# 3. Flexible Parsing
def parse_auto(date_string: str) -> Optional[datetime]:
"""
Auto-detect and parse format
Args:
date_string: Date string
Returns:
Datetime object or None
"""
# Try ISO 8601 first
result = parse_iso8601(date_string)
if result:
return result
# Try RFC 2822
result = parse_rfc2822(date_string)
if result:
return result
# Try common formats
formats = [
'%Y-%m-%d %H:%M:%S',
'%Y-%m-%dT%H:%M:%S',
'%Y-%m-%d',
'%d/%m/%Y',
'%m/%d/%Y',
'%d.%m.%Y',
'%m.%d.%Y',
'%d %b %Y',
'%d %B %Y',
'%b %d, %Y',
'%B %d, %Y',
'%Y%m%d',
'%d/%m/%y',
'%m/%d/%y'
]
for fmt in formats:
try:
return datetime.strptime(date_string, fmt)
except:
continue
return None
def parse_auto_list(date_string: str) -> List[datetime]:
"""
Parse and return all possible interpretations
Args:
date_string: Date string
Returns:
List of possible datetimes
"""
results = []
formats = [
'%Y-%m-%d %H:%M:%S',
'%Y-%m-%d',
'%d/%m/%Y',
'%m/%d/%Y',
'%d.%m.%Y',
'%m.%d.%Y'
]
for fmt in formats:
try:
results.append(datetime.strptime(date_string, fmt))
except:
continue
return results
# 4. Time Parsing
def parse_time(time_string: str) -> Optional[datetime]:
"""
Parse time string
Args:
time_string: Time string
Returns:
Datetime object or None
"""
formats = [
'%H:%M:%S',
'%H:%M',
'%I:%M:%S %p',
'%I:%M %p',
'%H:%M:%S.%f',
'%I:%M:%S.%f %p'
]
for fmt in formats:
try:
parsed = datetime.strptime(time_string, fmt)
return parsed
except:
continue
return None
def parse_timestamp(timestamp: float) -> datetime:
"""
Parse Unix timestamp
Args:
timestamp: Unix timestamp
Returns:
Datetime object
"""
return datetime.fromtimestamp(timestamp)
def parse_timestamp_ms(timestamp: int) -> datetime:
"""
Parse millisecond timestamp
Args:
timestamp: Millisecond timestamp
Returns:
Datetime object
"""
return datetime.fromtimestamp(timestamp / 1000)
# 5. Relative Time Parsing
def parse_relative(relative_string: str) -> Optional[datetime]:
"""
Parse relative time strings
Args:
relative_string: Relative time (e.g., "in 5 minutes", "2 hours ago")
Returns:
Datetime object or None
"""
from datetime import timedelta
import re
now = datetime.now()
# Match patterns like "5 minutes ago", "in 2 hours", etc.
patterns = [
(r'(\d+)\s+second[s]?\s+ago', lambda m: now - timedelta(seconds=int(m.group(1)))),
(r'(\d+)\s+minute[s]?\s+ago', lambda m: now - timedelta(minutes=int(m.group(1)))),
(r'(\d+)\s+hour[s]?\s+ago', lambda m: now - timedelta(hours=int(m.group(1)))),
(r'(\d+)\s+day[s]?\s+ago', lambda m: now - timedelta(days=int(m.group(1)))),
(r'\s+in\s+(\d+)\s+second[s]?', lambda m: now + timedelta(seconds=int(m.group(1)))),
(r'\s+in\s+(\d+)\s+minute[s]?', lambda m: now + timedelta(minutes=int(m.group(1)))),
(r'\s+in\s+(\d+)\s+hour[s]?', lambda m: now + timedelta(hours=int(m.group(1)))),
(r'\s+in\s+(\d+)\s+day[s]?', lambda m: now + timedelta(days=int(m.group(1)))),
]
for pattern, calculator in patterns:
match = re.search(pattern, relative_string, re.IGNORECASE)
if match:
return calculator(match)
return None
# 6. Multi-Format Parsing
def try_multiple_formats(date_string: str, formats: List[str]) -> Optional[datetime]:
"""
Try multiple formats
Args:
date_string: Date string
formats: List of format strings
Returns:
First successful parse or None
"""
for fmt in formats:
try:
return datetime.strptime(date_string, fmt)
except:
continue
return None
# 7. Parser with Fallback
def parse_with_fallback(date_string: str, fallback: Optional[datetime] = None) -> Optional[datetime]:
"""
Parse with fallback on failure
Args:
date_string: Date string
fallback: Fallback datetime
Returns:
Parsed datetime or fallback
"""
result = parse_auto(date_string)
return result if result else fallback
# 8. Validation
def is_valid_date(date_string: str, format_string: str) -> bool:
"""
Validate date string against format
Args:
date_string: Date string
format_string: Format string
Returns:
True if valid
"""
try:
datetime.strptime(date_string, format_string)
return True
except:
return False
def get_detected_format(date_string: str) -> Optional[str]:
"""
Detect which format matches
Args:
date_string: Date string
Returns:
Format string or None
"""
formats = [
'%Y-%m-%d',
'%d/%m/%Y',
'%m/%d/%Y',
'%Y-%m-%d %H:%M:%S',
'%Y-%m-%dT%H:%M:%S',
'%d %b %Y',
'%b %d, %Y'
]
for fmt in formats:
if is_valid_date(date_string, fmt):
return fmt
return None
# 9. Extract Date Parts
def extract_date_parts(date_string: str) -> Optional[dict]:
"""
Extract date parts using regex
Args:
date_string: Date string
Returns:
Dictionary with parts or None
"""
# Try ISO format
match = re.match(r'(\d{4})-(\d{2})-(\d{2})', date_string)
if match:
return {
'year': int(match.group(1)),
'month': int(match.group(2)),
'day': int(match.group(3))
}
# Try US format
match = re.match(r'(\d{2})/(\d{2})/(\d{4})', date_string)
if match:
return {
'month': int(match.group(1)),
'day': int(match.group(2)),
'year': int(match.group(3))
}
# Try EU format
match = re.match(r'(\d{2})/(\d{2})/(\d{4})', date_string)
if match:
return {
'day': int(match.group(1)),
'month': int(match.group(2)),
'year': int(match.group(3))
}
return None
# Usage Examples
def demonstrate_time_parsing():
print("=== Web Python Time Parsing Examples ===\n")
# 1. Basic parsing
print("--- 1. Basic Parsing ---")
iso = "2025-12-31T14:30:45"
print(f"ISO string: {iso}")
print(f"Parsed: {parse_iso8601(iso)}")
custom = "31/12/2025"
format = "%d/%m/%Y"
print(f"\nCustom: {custom} with format {format}")
print(f"Parsed: {parse_custom_format(custom, format)}")
# 2. Common formats
print("\n--- 2. Common Format Parsing ---")
us = "12/31/2025"
print(f"US date '{us}': {parse_us_date(us)}")
eu = "31/12/2025"
print(f"EU date '{eu}': {parse_eu_date(eu)}")
iso = "2025-12-31"
print(f"ISO date '{iso}': {parse_iso_date(iso)}")
# 3. Auto-detect
print("\n--- 3. Auto-Detection ---")
test_dates = ["2025-12-31", "31/12/2025", "12/31/2025", "Dec 31, 2025"]
for date in test_dates:
parsed = parse_auto(date)
print(f"'{date}' -> {parsed}")
# 4. Time parsing
print("\n--- 4. Time Parsing ---")
times = ["14:30:45", "2:30 PM", "14:30"]
for t in times:
parsed = parse_time(t)
print(f"'{t}' -> {parsed}")
# 5. Timestamp parsing
print("\n--- 5. Timestamp Parsing ---")
ts = 1735667445
print(f"Timestamp {ts}: {parse_timestamp(ts)}")
# 6. Relative time
print("\n--- 6. Relative Time Parsing ---")
relative = ["in 5 minutes", "2 hours ago", "3 days ago"]
for rel in relative:
parsed = parse_relative(rel)
print(f"'{rel}' -> {parsed}")
# 7. Multi-format
print("\n--- 7. Try Multiple Formats ---")
formats = ['%Y-%m-%d', '%d/%m/%Y', '%m/%d/%Y']
result = try_multiple_formats("2025-12-31", formats)
print(f"Result: {result}")
# 8. Validation
print("\n--- 8. Validation ---")
valid = is_valid_date("2025-12-31", "%Y-%m-%d")
print(f"Is '2025-12-31' valid for '%Y-%m-%d': {valid}")
invalid = is_valid_date("31-12-2025", "%Y-%m-%d")
print(f"Is '31-12-2025' valid for '%Y-%m-%d': {invalid}")
# 9. Format detection
print("\n--- 9. Format Detection ---")
test = "31/12/2025"
detected = get_detected_format(test)
print(f"Detected format for '{test}': {detected}")
# 10. Extract parts
print("\n--- 10. Extract Date Parts ---")
parts = extract_date_parts("2025-12-31")
print(f"Parts: {parts}")
print("\n=== All Time Parsing Examples Completed ===")
# Export functions
export { parse_iso8601, parse_rfc2822, parse_custom_format }
export { parse_us_date, parse_eu_date, parse_iso_date }
export { parse_auto, parse_auto_list }
export { parse_time, parse_timestamp, parse_timestamp_ms }
export { parse_relative }
export { try_multiple_formats }
export { parse_with_fallback }
export { is_valid_date, get_detected_format }
export { extract_date_parts }
export { demonstrate_time_parsing }