Validation and Conversion
Validation Methods
Validation Type |
Method |
Description |
Format Check |
Regex |
Validate date string pattern |
Range Validation |
Comparison |
Ensure date within acceptable range |
Type Checking |
isinstance() |
Confirm correct data type |
Comprehensive Date Validation Function
import re
from datetime import datetime, date
def validate_date(date_string):
## Regex pattern for YYYY-MM-DD format
date_pattern = r'^\d{4}-\d{2}-\d{2}$'
## Check format
if not re.match(date_pattern, date_string):
return False
try:
## Attempt to convert to date
parsed_date = datetime.strptime(date_string, "%Y-%m-%d").date()
## Additional range validation
current_year = date.today().year
if parsed_date.year < 1900 or parsed_date.year > current_year + 100:
return False
return True
except ValueError:
return False
Date Conversion Strategies
graph TD
A[Input Date] --> B{Validate Format}
B --> |Valid| C[Parse Date]
B --> |Invalid| D[Handle Error]
C --> E[Convert to Desired Format]
def convert_date_format(date_string, input_format, output_format):
try:
## Parse input date
parsed_date = datetime.strptime(date_string, input_format)
## Convert to desired format
converted_date = parsed_date.strftime(output_format)
return converted_date
except ValueError:
print("Invalid date or format")
return None
## Example conversions
formats = {
'iso': '%Y-%m-%d',
'us': '%m/%d/%Y',
'eu': '%d-%m-%Y'
}
## Usage examples
iso_date = '2023-06-15'
us_date = convert_date_format(iso_date, formats['iso'], formats['us'])
eu_date = convert_date_format(iso_date, formats['iso'], formats['eu'])
Advanced Validation Techniques
def advanced_date_validation(date_string):
try:
## Strict parsing with additional checks
parsed_date = datetime.strptime(date_string, "%Y-%m-%d")
## Custom validation rules
validations = [
## Check if date is not in future
parsed_date.date() <= date.today(),
## Ensure valid calendar date
parsed_date.day <= 31,
parsed_date.month <= 12
]
## Return True only if all validations pass
return all(validations)
except ValueError:
return False
Type Conversion Utilities
def flexible_date_converter(date_input):
## Handle different input types
if isinstance(date_input, str):
try:
return datetime.strptime(date_input, "%Y-%m-%d").date()
except ValueError:
return None
elif isinstance(date_input, datetime):
return date_input.date()
elif isinstance(date_input, date):
return date_input
return None
LabEx Learning Tip
LabEx provides interactive environments to practice these validation and conversion techniques in real-world scenarios.
Key Takeaways
- Always validate before converting
- Use multiple validation checks
- Handle different input formats
- Implement robust error handling
- Be aware of potential edge cases