Blog·Craft·

A point in the ocean has a timezone

GET /timezone?lat=&lon= returns the IANA zone at that point. Open ocean answers nautical Etc/GMT time, and the plus sign in the id means minus.

Open ocean has a timezone. The plus sign means minus.

GET /timezone?lat=30&lon=-40
{
  "latitude": 30,
  "longitude": -40,
  "timezone": "Etc/GMT+3",
  "name": "GMT-03:00",
  "abbreviation": "GMT-3",
  "offset": "-03:00",
  "offset_minutes": -180,
  "dst": false,
  "next_dst": null
}

Land returns a civil zone, America/New_York at 40.71, -74.01. Past territorial waters the clock is nautical time, 15 degree longitude bands, encoded in the tz database as Etc/GMT ids. Etc/GMT+3 is UTC minus three. That inverted sign is POSIX, baked into the id itself. offset and name read the normal way, -03:00 and GMT-03:00. No DST out there, so next_dst is null.

Same bag as an IANA id

Pass a point or pass America/New_York. You get timezone, offset, abbreviation, whether DST is on, and the next clock change. ?at= pins any instant. The ocean is not a special case in the JSON, it is just a different id.

Try it

Call /timezone with lat=30&lon=-40. Feed Etc/GMT+3 to any date library. It already knows the sign is backwards.