51 lines
2.0 KiB
Markdown
51 lines
2.0 KiB
Markdown
---
|
|
epic: 4
|
|
story: 4.3
|
|
title: "Time Zone Conversions"
|
|
status: draft
|
|
---
|
|
|
|
## Epic 4 — Date, Time & Time Zones
|
|
**Goal:** Full date/time math, business day calculations, and timezone awareness.
|
|
|
|
### Story 4.3: Time Zone Conversions
|
|
|
|
As a CalcPad user,
|
|
I want to convert times between time zones using city names and IANA timezone identifiers,
|
|
So that I can coordinate across geographies without looking up UTC offsets.
|
|
|
|
**Acceptance Criteria:**
|
|
|
|
**Given** the expression `3pm Tokyo in London`
|
|
**When** the engine evaluates it
|
|
**Then** it converts 3:00 PM JST (Asia/Tokyo) to the equivalent time in GMT/BST (Europe/London)
|
|
**And** the result accounts for the current DST status of both zones
|
|
|
|
**Given** the expression `New York time`
|
|
**When** the engine evaluates it
|
|
**Then** it returns the current time in the America/New_York timezone
|
|
|
|
**Given** the expression `now in PST`
|
|
**When** the engine evaluates it
|
|
**Then** it returns the current time converted to Pacific Standard Time (America/Los_Angeles)
|
|
|
|
**Given** the engine's timezone database
|
|
**When** queried for supported zones
|
|
**Then** it supports all IANA timezones via the `chrono-tz` crate
|
|
**And** at least 500 city name aliases map to their corresponding IANA zones
|
|
|
|
**Given** the expression `3pm EST in CET`
|
|
**When** the engine evaluates it
|
|
**Then** it converts from Eastern Standard Time to Central European Time
|
|
**And** DST transitions are handled correctly (e.g., EST vs EDT, CET vs CEST)
|
|
|
|
**Given** an ambiguous city name (e.g., `Portland` which exists in Oregon and Maine)
|
|
**When** the engine encounters it
|
|
**Then** it uses the most commonly referenced city by default (Portland, Oregon = America/Los_Angeles)
|
|
**And** the user can disambiguate with state/country (e.g., `Portland, ME`)
|
|
|
|
**Given** the expression `9am Monday New York in Tokyo`
|
|
**When** the engine evaluates it
|
|
**Then** it converts 9:00 AM on the next Monday in New York to the equivalent time in Tokyo
|
|
**And** if the conversion crosses a date boundary, the result shows the correct date and time
|