A powerful and flexible Python library for advanced date and time manipulation. Datepulator provides an intuitive interface for working with dates, including timezone conversions, business day calculations, date arithmetic, and more.
- π Date Arithmetic: Add or subtract years, months, days, hours, minutes, and seconds
- π Timezone Support: Convert dates between any timezone using pytz
- πΌ Business Days: Calculate business days considering weekends and holidays
- π Date Ranges: Generate sequences of dates with custom intervals
- π Age Calculation: Calculate age with detailed breakdown
- π Format Conversion: Convert between different date formats
- β‘ Performance: Optimized for speed and efficiency
- π Type Hints: Full typing support for better IDE integration
pip install datepulatorfrom datepulator import DateManager
# Initialize DateManager
dm = DateManager(default_timezone="UTC")
# Convert date format
result = dm.convert("2023/12/25", from_format="%Y/%m/%d", to_format="%d-%b-%Y")
print(result) # Output: 25-Dec-2023
# Add time to a date
new_date = dm.add_time("2023-01-15",
years=1,
months=2,
days=10)
print(new_date) # Output: 2024-03-25T00:00:00
# Calculate age
age = dm.calculate_age("1990-05-20")
print(age) # Output: {'years': 33, 'months': 7, 'days': 15, 'total_days': 12271}dm = DateManager()
# Add time
future_date = dm.add_time("2023-01-15",
years=1,
months=2,
days=3,
hours=4,
minutes=30)
# Subtract time
past_date = dm.subtract_time("2023-01-15",
months=3,
days=5)# Convert from UTC to New York time
ny_time = dm.convert_timezone("2023-01-15 10:00:00",
from_tz="UTC",
to_tz="America/New_York")
# Convert from Tokyo to London time
london_time = dm.convert_timezone("2023-01-15 15:00:00",
from_tz="Asia/Tokyo",
to_tz="Europe/London")# Define holidays
holidays = [
"2023-12-25", # Christmas
"2023-12-26", # Boxing Day
"2024-01-01" # New Year's Day
]
# Check if it's a business day
is_working = dm.is_business_day("2023-12-25", holidays=holidays)
# Add business days
next_working_day = dm.add_business_days("2023-12-24",
days=3,
holidays=holidays)# Get daily dates
daily_dates = dm.get_date_range("2023-01-01",
"2023-01-10",
interval="days")
# Get weekly dates
weekly_dates = dm.get_date_range("2023-01-01",
"2023-03-01",
interval="weeks")
# Get monthly dates
monthly_dates = dm.get_date_range("2023-01-01",
"2023-12-31",
interval="months")# Calculate age as of today
current_age = dm.calculate_age("1990-05-20")
# Calculate age as of a specific date
past_age = dm.calculate_age("1990-05-20",
reference_date="2010-01-01")DateManager(default_timezone: str = "UTC")-
convert(date_str: str, from_format: str = None, to_format: str = "%Y-%m-%d") -> str- Convert date string from one format to another
- Auto-detects format if
from_formatis None
-
add_time(date_str: str, years: int = 0, months: int = 0, days: int = 0, hours: int = 0, minutes: int = 0, seconds: int = 0) -> str- Add specified time duration to a date
- Returns ISO format string
-
subtract_time(date_str: str, years: int = 0, months: int = 0, days: int = 0, hours: int = 0, minutes: int = 0, seconds: int = 0) -> str- Subtract specified time duration from a date
- Returns ISO format string
-
convert_timezone(date_str: str, from_tz: str, to_tz: str) -> str- Convert date from one timezone to another
- Uses pytz timezones
-
get_date_range(start_date: str, end_date: str, interval: str = 'days') -> List[str]- Get list of dates between start_date and end_date
- Interval options: 'days', 'weeks', 'months'
-
calculate_age(birth_date: str, reference_date: str = None) -> Dict[str, int]- Calculate age and related information
- Returns dict with years, months, days, and total_days
-
is_business_day(date_str: str, holidays: List[str] = None) -> bool- Check if given date is a business day
- Considers weekends and optional holidays
-
add_business_days(date_str: str, days: int, holidays: List[str] = None) -> str- Add specified number of business days
- Skips weekends and holidays
All methods include comprehensive error handling and will raise ValueError with descriptive messages when:
- Invalid date strings are provided
- Invalid formats are specified
- Invalid timezone names are used
- Other validation errors occur
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
If you have any questions or run into issues, please:
- Check the Issues page
- Create a new issue if your problem isn't already listed
- Provide as much detail as possible about your problem
- Built with Python
- Timezone support by pytz
- Date parsing by python-dateutil
Made with β€οΈ by Ashutosh Bele