import fasttime
def main():
print("=== Timezone (Fixed Offset) Examples ===\n")
print("1. Creating UTC Offsets")
print("-" * 40)
utc = fasttime.UtcOffset.from_seconds(0)
plus_five_thirty = fasttime.UtcOffset.from_hours_minutes(True, 5, 30)
minus_eight = fasttime.UtcOffset.from_hours_minutes(False, 8, 0)
plus_one = fasttime.UtcOffset.from_seconds(3600)
print(f"UTC: {utc} ({utc.as_seconds()} seconds)")
print(f"+05:30: {plus_five_thirty} ({plus_five_thirty.as_seconds()} seconds)")
print(f"-08:00: {minus_eight} ({minus_eight.as_seconds()} seconds)")
print(f"+01:00: {plus_one} ({plus_one.as_seconds()} seconds)")
print(f"UTC check: {utc.is_utc()}")
print(f"+05:30 UTC?: {plus_five_thirty.is_utc()}")
print()
print("2. Creating OffsetDateTime from UTC")
print("-" * 40)
utc_dt = fasttime.DateTime.parse("2024-06-15T12:00:00Z")
offset = fasttime.UtcOffset.from_hours_minutes(True, 5, 30)
odt = fasttime.OffsetDateTime.from_utc(utc_dt, offset)
print(f"UTC DateTime: {utc_dt}")
print(f"With offset: {odt}")
print(f"Local DateTime: {odt.to_local()}")
print()
print("3. Creating OffsetDateTime from Local Time")
print("-" * 40)
date = fasttime.Date(2024, 6, 15)
time = fasttime.Time(18, 0, 0) offset = fasttime.UtcOffset.from_hours_minutes(True, 5, 30)
odt = fasttime.OffsetDateTime.from_local(date, time, offset)
print(f"Local Date: {date}")
print(f"Local Time: {time}")
print(f"Offset: {offset}")
print(f"OffsetDateTime: {odt}")
print(f"UTC equivalent: {odt.utc}")
print()
print("4. Common Timezone Offsets")
print("-" * 40)
common_offsets = [
("UTC", 0, 0, True),
("EST", 5, 0, False), ("PST", 8, 0, False), ("CET", 1, 0, True), ("IST", 5, 30, True), ("JST", 9, 0, True), ]
date = fasttime.Date(2024, 6, 15)
time = fasttime.Time(12, 0, 0)
for name, hours, minutes, positive in common_offsets:
offset = fasttime.UtcOffset.from_hours_minutes(positive, hours, minutes)
odt = fasttime.OffsetDateTime.from_local(date, time, offset)
print(f"{name:5} ({offset}): {odt} -> UTC: {odt.utc}")
print()
print("5. Converting Between Offsets")
print("-" * 40)
ny_offset = fasttime.UtcOffset.from_hours_minutes(False, 5, 0)
ny_date = fasttime.Date(2024, 6, 15)
ny_time = fasttime.Time(14, 30, 0)
ny_dt = fasttime.OffsetDateTime.from_local(ny_date, ny_time, ny_offset)
print(f"New York time: {ny_dt}")
utc_dt = ny_dt.utc
print(f"UTC time: {utc_dt}")
tokyo_offset = fasttime.UtcOffset.from_hours_minutes(True, 9, 0)
tokyo_dt = fasttime.OffsetDateTime.from_utc(utc_dt, tokyo_offset)
print(f"Tokyo time: {tokyo_dt}")
print(f"Tokyo local: {tokyo_dt.to_local()}")
print()
print("6. Parsing RFC 3339 with Offsets")
print("-" * 40)
rfc3339_examples = [
"2024-06-15T12:00:00Z",
"2024-06-15T12:00:00+00:00",
"2024-06-15T12:00:00-05:00",
"2024-06-15T12:00:00+05:30",
]
for s in rfc3339_examples:
odt = fasttime.OffsetDateTime.parse(s)
print(f"{s:35} -> {odt}")
print(f" UTC: {odt.utc}, Offset: {odt.offset}")
print()
print("7. Duration with Offsets")
print("-" * 40)
start = fasttime.OffsetDateTime.parse("2024-06-15T10:00:00+05:30")
duration = fasttime.Duration.seconds(7200) end = start.add_duration(duration)
print(f"Start: {start}")
print(f"Duration: {duration.total_seconds() / 3600} hours")
print(f"End: {end}")
print(f"Difference: {end.difference(start).total_seconds()} seconds")
print()
print("8. Comparing Across Offsets")
print("-" * 40)
ny = fasttime.OffsetDateTime.parse("2024-06-15T12:00:00-05:00")
utc = fasttime.OffsetDateTime.parse("2024-06-15T17:00:00Z")
india = fasttime.OffsetDateTime.parse("2024-06-15T22:30:00+05:30")
print(f"New York: {ny}")
print(f"UTC: {utc}")
print(f"India: {india}")
print(f"\nAll represent the same instant:")
print(f"NY == UTC: {ny == utc}")
print(f"UTC == India: {utc == india}")
print(f"NY == India: {ny == india}")
print()
print("9. Unix Timestamps with Offsets")
print("-" * 40)
odt = fasttime.OffsetDateTime.parse("2024-06-15T18:00:00+05:30")
timestamp = odt.unix_timestamp()
timestamp_nanos = odt.unix_timestamp_nanos()
print(f"OffsetDateTime: {odt}")
print(f"UTC equivalent: {odt.utc}")
print(f"Unix timestamp: {timestamp}")
print(f"Unix timestamp ns: {timestamp_nanos}")
utc_dt = fasttime.DateTime.from_unix_timestamp(timestamp)
print(f"From timestamp: {utc_dt}")
print()
if __name__ == "__main__":
main()