Timezone Conversion
Kibot data uses US Eastern Time (ET) for timestamps by default, and the time zone can be changed to suit your needs. When you keep the default, every date and time field in every file reflects the US Eastern timezone. This page explains how ET behaves across the year, how to convert to your local time correctly, and how to avoid the DST pitfalls that silently corrupt otherwise-clean conversions.
Eastern Time Explained
Eastern Time alternates between two offsets from UTC. Eastern Standard Time (EST) is UTC-5 and runs from the first Sunday of November through the second Sunday of March. Eastern Daylight Time (EDT) is UTC-4 and runs from the second Sunday of March through the first Sunday of November. The transition occurs at 2:00 AM local time: in spring clocks jump from 2:00 AM to 3:00 AM, and in fall they fall back from 2:00 AM to 1:00 AM.
Prior to 2007, DST in the United States started on the first Sunday of April and ended on the last Sunday of October. The Energy Policy Act of 2005 extended DST by several weeks. If you are working with Kibot data from before 2007, keep this in mind when deciding whether a given date falls under EST or EDT.
Common Conversion Offsets
| Timezone | Standard Offset from ET | Daylight Offset from ET |
|---|---|---|
| UTC/GMT | +5 hours | +4 hours |
| London (GMT/BST) | +5 / +4 hours | +4 / +5 hours (depends on both DST transitions) |
| Berlin (CET/CEST) | +6 hours | +6 hours (usually; can be +5 during transition gaps) |
| Tokyo (JST) | +14 hours | +13 hours |
| Sydney (AEST/AEDT) | +15/+16 hours | +14/+15 hours |
| Chicago (CT) | -1 hour | -1 hour |
| Denver (MT) | -2 hours | -2 hours |
| Los Angeles (PT) | -3 hours | -3 hours |
London and Berlin have variable offsets because the US and Europe change clocks on different dates. The US switches to EDT on the second Sunday of March, while the EU switches to summer time on the last Sunday of March. In fall, the US reverts on the first Sunday of November, while the EU reverts on the last Sunday of October. During the weeks between these transitions, the offset between ET and European time zones differs from its usual value.
Conversion Methods
Four practical paths cover almost every workflow: the Kibot Agent, the Kibot API, a Python script, or Excel.
Kibot Agent
Use the --timezone parameter when downloading data through the Kibot Agent application. The agent converts all timestamps from Eastern Time to the specified timezone automatically and handles DST transitions correctly.
Kibot API
Append &timezone= to the API request URL. For example:
http://api.kibot.com/?action=history&symbol=AAPL&interval=1&timezone=UTC
Supported timezone values include standard identifiers such as UTC, US/Pacific, Europe/London, and others.
Python
For Python 3.9 and later, use the built-in zoneinfo module:
from datetime import datetime
from zoneinfo import ZoneInfo # Python 3.9+
# Convert Eastern Time to UTC
et = ZoneInfo("America/New_York")
utc = ZoneInfo("UTC")
# Parse a Kibot timestamp
dt_str = "09/15/2025 10:30:00"
dt = datetime.strptime(dt_str, "%m/%d/%Y %H:%M:%S")
dt_et = dt.replace(tzinfo=et)
dt_utc = dt_et.astimezone(utc)
print(f"ET: {dt_et}") # 2025-09-15 10:30:00-04:00
print(f"UTC: {dt_utc}") # 2025-09-15 14:30:00+00:00
For Python versions before 3.9, use the pytz library instead. Note that pytz has a different API, you must use .localize() to attach timezone information, not .replace():
import pytz
from datetime import datetime
et = pytz.timezone("America/New_York")
dt_str = "09/15/2025 10:30:00"
dt = datetime.strptime(dt_str, "%m/%d/%Y %H:%M:%S")
# CORRECT: use localize()
dt_et = et.localize(dt)
# WRONG: dt.replace(tzinfo=et) will produce incorrect offsets with pytz
Using .replace() with a pytz timezone object silently applies the wrong UTC offset, often LMT, a historical offset that predates standard time. Always use .localize(). For new projects, zoneinfo is the recommended approach; pytz is considered legacy and the broader Python ecosystem (including Django 4.0+) has migrated away from it.
Excel
Excel does not handle DST transitions automatically. A simple formula like =A1 + 5/24 is correct during EST but wrong during EDT. Handling this properly requires either a lookup table of DST transition dates or a VBA macro that checks whether a given date falls within DST. For most users, converting timestamps via the Kibot API (&timezone=UTC) before importing into Excel is the simpler path.
DST Pitfalls
Spring Forward Gap
When clocks spring forward, timestamps between 2:00 AM and 2:59 AM ET do not exist. If an analysis framework encounters such a timestamp, for example, due to a timezone conversion error, it may throw an exception or silently produce an incorrect result.
Fall Back Overlap
When clocks fall back, the hour from 1:00 AM to 1:59 AM ET occurs twice. Equity market data files will not normally contain timestamps during these hours (US equity markets close at 4:00 PM and after-hours trading ends by 8:00 PM), but forex and futures data that spans overnight sessions can be affected.
US vs. EU DST Transition Differences
The United States and the European Union change clocks on different weekends:
| Transition | United States | European Union |
|---|---|---|
| Spring forward | 2nd Sunday of March | Last Sunday of March |
| Fall back | 1st Sunday of November | Last Sunday of October |
During the gap weeks, typically two to three weeks in spring and one week in fall, the offset between ET and European timezones differs from its usual value. If you apply a fixed offset, your conversions will be wrong during these periods. Always use a proper timezone library rather than hardcoded offsets.
EU DST Abolition, Current Status
In 2018, the European Commission proposed abolishing seasonal clock changes across the EU, and the European Parliament voted overwhelmingly in favor in March 2019. However, the proposal has stalled at the Council of the European Union, where member states have been unable to agree on whether to adopt permanent summer time or permanent winter time. As of early 2026, the European Commission has confirmed that the final decision rests with individual member states, and the existing EU summer time directive remains in force. No member state can unilaterally opt out without a directive change. If the EU eventually abolishes clock changes, the offset between ET and European timezones will become simpler, but until then, continue to account for both US and EU DST transitions in your conversions.
Key Takeaways
- Kibot data is stamped in Eastern Time by default, EST (UTC-5) in winter, EDT (UTC-4) in summer; the time zone can be changed to suit your needs.
- US DST runs from the second Sunday of March to the first Sunday of November; pre-2007 rules differ.
- Four conversion paths: Kibot Agent
--timezone, API&timezone=, Python (zoneinfofor 3.9+,pytz.localize()for older versions), or Excel with a DST-aware workaround. - Never use
.replace(tzinfo=...)withpytz, it silently produces an LMT-based offset. Use.localize(). - The US and EU change clocks on different weekends, so ET-to-Europe offsets vary during the gap weeks.
- Hardcoded offsets are always wrong eventually; use a timezone library.
- EU seasonal clock changes remain in force as of 2026 despite the 2019 Parliament vote.
Related
- Trading hours, ET-anchored regular and extended session boundaries.
- Market holidays, ET-anchored full and shortened trading days.
- Data format reference, how the Date and Time fields appear in each Kibot product.
- Tick data, the high-resolution timestamps where timezone errors are most visible.
- Kibot Agent, the desktop tool that exposes the
--timezoneflag described above. - History request, the API endpoint that accepts the
&timezone=parameter.