Calculating time differences with pytz module

from datetime import datetime
import pytz

# Retrieve current time in UTC
def get_current_utc_time():
    utc_now = datetime.now(pytz.utc)
    return utc_now

# Convert current time to a specific time zone
def convert_time_to_timezone(current_time, timezone_str):
    timezone = pytz.timezone(timezone_str)
    converted_time = current_time.astimezone(timezone)
    return converted_time

# Format time into a readable string
def format_time(time):
    return time.strftime('%Y-%m-%d %H:%M:%S %Z%z')

# Calculate the time difference between two time zones
def calculate_time_difference(tz1, tz2):
    reference_time = datetime(2024, 1, 1, 12, 0, 0, tzinfo=pytz.utc)
    tz1_time = reference_time.astimezone(pytz.timezone(tz1))
    tz2_time = reference_time.astimezone(pytz.timezone(tz2))
    difference = (tz2_time - tz1_time).total_seconds() / 3600
    return abs(difference)

# Determine a suitable meeting time across different time zones
def find_meeting_time(base_tz, other_tzs, base_time):
    base_timezone = pytz.timezone(base_tz)
    base_time = datetime.strptime(base_time, "%Y-%m-%d %H:%M").replace(tzinfo=base_timezone)
    meeting_times = {}
    for tz in other_tzs:
        local_time = base_time.astimezone(pytz.timezone(tz))
        meeting_times[tz] = format_time(local_time)
    return meeting_times

# Example usage and demonstration of functionalities
def main():
    # Time retrieval
    utc_now = get_current_utc_time()
    print("Current UTC time:", format_time(utc_now))
    
    # Time zone conversion
    time_zones = ['America/New_York', 'Europe/London', 'Asia/Tokyo']
    for tz in time_zones:
        converted_time = convert_time_to_timezone(utc_now, tz)
        print(f"Current time in {tz}:", format_time(converted_time))
    
    # Time difference calculation
    difference = calculate_time_difference('Europe/London', 'Asia/Tokyo')
    print("Time difference between London and Tokyo:", difference, "hours")
    
    # Finding a suitable meeting time
    meeting_time = find_meeting_time('America/New_York', ['Europe/London', 'Asia/Tokyo'], "2024-05-01 09:00")
    print("Meeting times across time zones:")
    for tz, time in meeting_time.items():
        print(tz, ":", time)

if __name__ == "__main__":
    main()
Code Explanation
1. Importing Modules
from datetime import datetime 
import pytz
  • datetime: This module supplies classes for manipulating dates and times.
  • pytz: This library allows accurate and cross-platform timezone calculations using Python.
2. Function Definitions
  • get_current_utc_time(): Retrieves the current UTC time using pytz.utc to ensure the datetime object is timezone-aware.
  • convert_time_to_timezone(current_time, timezone_str): Converts a given timezone-aware datetime object to a different timezone specified by timezone_str.
  • format_time(time): Formats a datetime object into a human-readable string that includes the timezone abbreviation and offset.
  • calculate_time_difference(tz1, tz2): Calculates the absolute difference in hours between two time zones. It uses a specific reference time (January 1, 2024, at 12:00 PM UTC) to ensure consistency.
  • find_meeting_time(base_tz, other_tzs, base_time): Determines suitable meeting times across different time zones. It takes a base time in one timezone and converts it to other specified timezones.
3. main() Function

This is the main function that ties all the other functions together:

  • It gets the current UTC time.
  • Converts this time to several specified time zones (America/New_York, Europe/London, Asia/Tokyo).
  • Calculates the time difference between London and Tokyo.
  • Finds a suitable meeting time across different time zones for a hypothetical meeting scheduled for May 1, 2024, at 9:00 AM in New York.
Output

When you run the main() function, it will print:

  • The current UTC time.
  • The current local times in New York, London, and Tokyo.
  • The time difference between London and Tokyo.
  • The scheduled meeting times in London and Tokyo based on the New York base time.

Here’s a sample of what the output might look like:

Current UTC time: 2024-04-25 06:42:17 UTC+0000
Current time in America/New_York: 2024-04-25 02:42:17 EDT-0400
Current time in Europe/London: 2024-04-25 07:42:17 BST+0100
Current time in Asia/Tokyo: 2024-04-25 15:42:17 JST+0900
Time difference between London and Tokyo: 9 hours
Meeting times across time zones:
Europe/London : 2024-05-01 14:00:00 BST+0100
Asia/Tokyo : 2024-05-01 22:00:00 JST+0900