This server has two distinct datetime formats. Using the wrong one produces silent errors.
birth_datetime: naive local time — no Z, no +01:00timezone: IANA name (e.g. "America/Chicago", "Europe/Berlin")Example: Chaka Khan born 9:05 PM in Chicago → store as:
birth_datetime = "1953-03-23T21:05:00"timezone = "America/Chicago"The conversion to UTC happens inside _get_person_birth_data() using
zoneinfo.ZoneInfo. Do NOT pre-convert to UTC before storing.
birth_datetime: UTC or offset-aware ISO 8601Examples:
"1990-05-15T10:30:00Z" or "1990-05-15T10:30:00+00:00""1990-05-15T12:30:00+02:00"These tools pass the datetime directly to the ephemeris server. No timezone conversion is performed.
person_id (or nickname) only._get_person_birth_data().Before standardized timezones, IANA data uses Local Mean Time (LMT) which can differ from modern UTC offsets by minutes. For example:
zoneinfo module handles this correctly when given the IANA name.Always provide the tz field with the IANA name. Do NOT compute the UTC offset
manually for historical dates.
| Context | Format | Example |
|---|---|---|
DB birth_datetime |
Naive local | "1953-03-23T21:05:00" |
DB timezone |
IANA name | "America/Chicago" |
| Direct-call tools | UTC or offset-aware | "1953-03-24T03:05:00Z" |
| _byId tools | person_id only | "chaka" |
_get_person_birth_data()
expects local time. If you store "03:05:00" (UTC) without a timezone, the
server treats it as 3:05 AM local Chicago = 08:05 UTC (wrong by 5 hours).birth_datetime has an offset
(e.g. "-07:05"), _normalize_datetime() uses that offset directly and
ignores the timezone column. The offset may be wrong (e.g. Chicago is CST
= UTC-6, not UTC-7).tz field — falls back to LMT from longitude, which is approximately
correct but not precise. Always set tz.