← Docs

Time API

Local time, timezone lookup, and conversion.

Get the current time in UTC, in an IANA timezone, or for a place. Every answer includes at, an ISO date and time with its UTC offset, and unix, the same instant in whole seconds since the Unix epoch. Timezone, offset, and daylight saving are core. Deep adds numeric offsets, seasonal clock changes and a friendly zone name, included on every plan.

Omit at for now. Pass an ISO timestamp with Z or a UTC offset for a specific instant. The fixed timestamps in these examples make their responses reproducible.

UTC

GET
api.parseapi.com/time
The current time in UTC. Optional ?at= selects a specific instant
Explore
Parameters 16
latnumber · query · optional

Latitude. Requires lon; omit both for UTC

Range: -90 to 90

lonnumber · query · optional

Longitude. Requires lat; omit both for UTC

Range: -180 to 180

ipstring · query · optional

Explicit IPv4 or IPv6 network location. Private, unknown or ambiguous locations remain unresolved. Mutually exclusive with every primary selector and coordinates.

citystring · query · optional

Exact city name or stable city ID. Optional country/state narrows matches. Multiple places return choices; no population-ranked selection.

countrystring · query · optional

ISO alpha-2 country selector, or context for city/address. A country with multiple timezones returns choices.

statestring · query · optional

Subdivision code for city/address, with country required. Bare code or country-prefixed code.

iatastring · query · optional

Three-letter airport code. Multiple records remain choices. Mutually exclusive with other primary inputs.

icaostring · query · optional

Four-letter ICAO airport code, matched to recorded airport coordinates.

unlocodestring · query · optional

UN/LOCODE for a covered port with recorded coordinates. Two country letters plus three location characters; optional separating space.

addressstring · query · optional

Street address with country=US. Exact recorded point matches only; missing or ambiguous points remain unresolved. Include number and postal code. This lookup does not verify delivery or occupancy.

atstring · query · optional

ISO date and time with up to three fractional-second digits; defaults to now. Unix numbers are not accepted as input. An explicit Z or UTC offset identifies an instant. With to= or targets=, no offset means source-zone wall time; without either, no offset means UTC. By default, repeated wall times select the earlier occurrence and skipped times advance by the offset gap. Use disambiguation to choose another policy. Invalid calendar dates return 400.

tostring · query · optional

Destination IANA timezone. Appends to with local at, unix, timezone, abbreviation, offset, and dst for the same instant. deep=true adds name, offset_minutes, and offset_seconds inside to.deep.

disambiguationstring · query · optional

For offsetless at with to or targets: compatible selects the earlier repeated time and advances skipped times by the clock gap; earlier or later chooses the earlier or later instant; reject returns HTTP 400 ambiguous_time for a repeat or nonexistent_time for a gap. Branch on code, then ask for a choice before retrying. Valid values do not alter an explicit-offset instant, now, or the UTC interpretation without a destination. Invalid policies return 400 invalid_request.

Default: compatible

Values: compatible, earlier, later, reject

targetsstring · query · optional

Comma-separated list of 1–10 IANA destination identifiers, instead of to. Appends an ordered targets array with one compact clock per requested zone. Duplicates stay in place, all unix values match, and any unknown zone rejects the whole request. One pooled request for the entire conversion. deep=true adds numeric offsets and a name to each target.

deepboolean · query · optional

Friendly zone name, numeric offsets, clock changes, seasonal boundaries, rules edition and local-time resolution. Included on every plan, with no additional charge.

Values: true

langstring · query · optional

Display language as one BCP 47 tag, such as fr or zh-Hant. Changes supported display labels only; IDs, codes, native names, facts, parsing and deep access stay unchanged. Omit for the original response. Unsupported regions use the supported language base; unsupported languages or scripts use English. Missing labels retain their source value. Accept-Language is not read automatically. Available on the current API contract; frozen 1.0.0 is unchanged.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time(undefined, { at: "2026-08-29T19:00:00Z" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone": "UTC",
  "abbreviation": "UTC",
  "offset": "+00:00",
  "dst": false,
  "at": "2026-08-29T19:00:00+00:00",
  "unix": 1788030000
}

By timezone

GET
api.parseapi.com/time/{timezone}
Local time, UTC offset and DST
Explore
Parameters 7
timezonestring · path · required

IANA timezone identifier. Slashes may be literal or URL-encoded

atstring · query · optional

ISO date and time with up to three fractional-second digits; defaults to now. Unix numbers are not accepted as input. An explicit Z or UTC offset identifies an instant. With to= or targets=, no offset means source-zone wall time; without either, no offset means UTC. By default, repeated wall times select the earlier occurrence and skipped times advance by the offset gap. Use disambiguation to choose another policy. Invalid calendar dates return 400.

tostring · query · optional

Destination IANA timezone. Appends to with local at, unix, timezone, abbreviation, offset, and dst for the same instant. deep=true adds name, offset_minutes, and offset_seconds inside to.deep.

disambiguationstring · query · optional

For offsetless at with to or targets: compatible selects the earlier repeated time and advances skipped times by the clock gap; earlier or later chooses the earlier or later instant; reject returns HTTP 400 ambiguous_time for a repeat or nonexistent_time for a gap. Branch on code, then ask for a choice before retrying. Valid values do not alter an explicit-offset instant, now, or the UTC interpretation without a destination. Invalid policies return 400 invalid_request.

Default: compatible

Values: compatible, earlier, later, reject

targetsstring · query · optional

Comma-separated list of 1–10 IANA destination identifiers, instead of to. Appends an ordered targets array with one compact clock per requested zone. Duplicates stay in place, all unix values match, and any unknown zone rejects the whole request. One pooled request for the entire conversion. deep=true adds numeric offsets and a name to each target.

deepboolean · query · optional

Friendly zone name, numeric offsets, clock changes, seasonal boundaries, rules edition and local-time resolution. Included on every plan, with no additional charge.

Values: true

langstring · query · optional

Display language as one BCP 47 tag, such as fr or zh-Hant. Changes supported display labels only; IDs, codes, native names, facts, parsing and deep access stay unchanged. Omit for the original response. Unsupported regions use the supported language base; unsupported languages or scripts use English. Missing labels retain their source value. Accept-Language is not read automatically. Available on the current API contract; frozen 1.0.0 is unchanged.

Use an IANA id such as America/New_York, Asia/Tokyo, or UTC. A slash can remain in the path or be URL-encoded as %2F.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time("America/New_York", { at: "2026-08-29T19:00:00Z" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone": "America/New_York",
  "abbreviation": "EDT",
  "offset": "-04:00",
  "dst": true,
  "at": "2026-08-29T15:00:00-04:00",
  "unix": 1788030000
}

Find a timezone

Search /time/zones?q=new york for a supported IANA identifier, or omit q for the full list. Search ignores case and treats spaces and underscores alike. Results are sorted; no match returns an empty array. The response includes the serving IANA rules edition, so autocomplete and conversion can use the same identifiers. Use city= on the bare Time route for city names.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time.zones("new york");
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone_database_version": "2026c",
  "timezones": [
    "America/New_York"
  ]
}

Build a timezone picker

Filter /time/zones by country, IANA area, signed offset,dst at the selected instant, or observes_dst during its UTC calendar year. Add sort=offset for numerical offset order and details=true for detailed zones rows. The existing timezones array always contains strings. at fixes the instant; otherwise all rows share one captured now. Country associations follow IANA’s shared rules since 1970; a row can list more than one country. Encode a positive offset’s plus sign as %2B. Both dst=false and observes_dst=false are valid filters.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time.zones(undefined, { country: "JP", at: "2026-09-24T12:00:00Z", details: true, sort: "offset" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone_database_version": "2026c",
  "at": "2026-09-24T12:00:00.000Z",
  "timezones": [
    "Asia/Tokyo",
    "Japan"
  ],
  "zones": [
    {
      "timezone": "Asia/Tokyo",
      "countries": [
        "AU",
        "JP"
      ],
      "area": "Asia",
      "abbreviation": "JST",
      "offset": "+09:00",
      "offset_seconds": 32400,
      "dst": false,
      "observes_dst": false
    },
    {
      "timezone": "Japan",
      "countries": [
        "AU",
        "JP"
      ],
      "area": "Asia",
      "abbreviation": "JST",
      "offset": "+09:00",
      "offset_seconds": 32400,
      "dst": false,
      "observes_dst": false
    }
  ]
}

Resolve an abbreviation explicitly

Use /time/zones?abbreviation=CST to get every matching identifier at the selected instant. Narrow with country, area or offset, then pass the chosen IANA identifier to Time. An abbreviation is a search criterion; it never silently selects a country or timezone. Aliases can appear as separate supported identifiers.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time.zones(undefined, { country: "CN", abbreviation: "CST", at: "2026-09-24T12:00:00Z" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone_database_version": "2026c",
  "at": "2026-09-24T12:00:00.000Z",
  "timezones": [
    "Asia/Chongqing",
    "Asia/Chungking",
    "Asia/Harbin",
    "Asia/Shanghai",
    "PRC"
  ]
}

Start with a place

Use exactly one explicit input on /time: city, country, ip,iata, icao, unlocode or address. A city name can include country and state context; a stable City ID also works. Address input requires country=US and matches recorded address points. IP input uses network-location evidence. UN/LOCODE lookup covers recorded ports with coordinates. Place lookup uses the same at, to and targets options and one pooled request.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time(undefined, { at: "2026-09-24T12:00:00Z", iata: "JFK" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "location": {
    "input": {
      "type": "iata",
      "value": "JFK"
    },
    "status": "resolved",
    "candidates": [
      {
        "id": "ourairports_3622",
        "name": "John F. Kennedy International Airport",
        "country": "US",
        "state": "NY",
        "timezone": "America/New_York",
        "latitude": 40.639447,
        "longitude": -73.779317
      }
    ],
    "truncated": false,
    "source": "OurAirports 2026-09-24"
  },
  "latitude": 40.639447,
  "longitude": -73.779317,
  "timezone": "America/New_York",
  "at": "2026-09-24T08:00:00-04:00",
  "unix": 1790251200,
  "offset": "-04:00",
  "abbreviation": "EDT",
  "dst": true
}

Inspect location.status. A unique timezone match is resolved. Multiple places or a country with multiple zones return ambiguous, with up to 50 candidates. Choose a candidate’s timezone explicitly, or narrow the city/address context.truncated=true means more matches may exist. Missing locations return not_found. Ambiguous and missing locations keep clock fields and requested destinations null; they never fall back to UTC.

Location coverage and sources

The 2026-09-24 airport snapshot resolves 9,053 IATA codes and 10,496 ICAO codes to one civil timezone. The recorded port subset resolves 3,244 UN/LOCODEs to one zone; it is not the complete UN/LOCODE directory.

Address lookup covers matched US points. City and IP results depend on the available location records. Airport and port coordinates without a civil-zone match stay unresolved. Boundary data is 2026b; clock rules are 2026c.

Source attribution

From coordinates

GET
api.parseapi.com/time?lat={lat}&lon={lon}
Local time and the IANA timezone at a coordinate. Supply both lat and lon
Explore
Parameters 16
latnumber · query · optional

Latitude. Requires lon; omit both for UTC

Range: -90 to 90

lonnumber · query · optional

Longitude. Requires lat; omit both for UTC

Range: -180 to 180

ipstring · query · optional

Explicit IPv4 or IPv6 network location. Private, unknown or ambiguous locations remain unresolved. Mutually exclusive with every primary selector and coordinates.

citystring · query · optional

Exact city name or stable city ID. Optional country/state narrows matches. Multiple places return choices; no population-ranked selection.

countrystring · query · optional

ISO alpha-2 country selector, or context for city/address. A country with multiple timezones returns choices.

statestring · query · optional

Subdivision code for city/address, with country required. Bare code or country-prefixed code.

iatastring · query · optional

Three-letter airport code. Multiple records remain choices. Mutually exclusive with other primary inputs.

icaostring · query · optional

Four-letter ICAO airport code, matched to recorded airport coordinates.

unlocodestring · query · optional

UN/LOCODE for a covered port with recorded coordinates. Two country letters plus three location characters; optional separating space.

addressstring · query · optional

Street address with country=US. Exact recorded point matches only; missing or ambiguous points remain unresolved. Include number and postal code. This lookup does not verify delivery or occupancy.

atstring · query · optional

ISO date and time with up to three fractional-second digits; defaults to now. Unix numbers are not accepted as input. An explicit Z or UTC offset identifies an instant. With to= or targets=, no offset means source-zone wall time; without either, no offset means UTC. By default, repeated wall times select the earlier occurrence and skipped times advance by the offset gap. Use disambiguation to choose another policy. Invalid calendar dates return 400.

tostring · query · optional

Destination IANA timezone. Appends to with local at, unix, timezone, abbreviation, offset, and dst for the same instant. deep=true adds name, offset_minutes, and offset_seconds inside to.deep.

disambiguationstring · query · optional

For offsetless at with to or targets: compatible selects the earlier repeated time and advances skipped times by the clock gap; earlier or later chooses the earlier or later instant; reject returns HTTP 400 ambiguous_time for a repeat or nonexistent_time for a gap. Branch on code, then ask for a choice before retrying. Valid values do not alter an explicit-offset instant, now, or the UTC interpretation without a destination. Invalid policies return 400 invalid_request.

Default: compatible

Values: compatible, earlier, later, reject

targetsstring · query · optional

Comma-separated list of 1–10 IANA destination identifiers, instead of to. Appends an ordered targets array with one compact clock per requested zone. Duplicates stay in place, all unix values match, and any unknown zone rejects the whole request. One pooled request for the entire conversion. deep=true adds numeric offsets and a name to each target.

deepboolean · query · optional

Friendly zone name, numeric offsets, clock changes, seasonal boundaries, rules edition and local-time resolution. Included on every plan, with no additional charge.

Values: true

langstring · query · optional

Display language as one BCP 47 tag, such as fr or zh-Hant. Changes supported display labels only; IDs, codes, native names, facts, parsing and deep access stay unchanged. Omit for the original response. Unsupported regions use the supported language base; unsupported languages or scripts use English. Missing labels retain their source value. Accept-Language is not read automatically. Available on the current API contract; frozen 1.0.0 is unchanged.

Land returns its civil timezone. Open ocean returns a nautical Etc/GMT zone. Those ids use the POSIX sign: Etc/GMT+3 means UTC-03:00. The response offset and local time use the ordinary sign. If the timezone cannot resolve, its fields are null. Coordinates also accept at and to.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time.at(40.7128, -74.006, { at: "2026-08-29T19:00:00Z" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "latitude": 40.7128,
  "longitude": -74.006,
  "timezone": "America/New_York",
  "abbreviation": "EDT",
  "offset": "-04:00",
  "dst": true,
  "at": "2026-08-29T15:00:00-04:00",
  "unix": 1788030000
}

Convert

Add to with a destination timezone. The to object gives its local time and offset. Both unix values are identical: this is one instant in two places. Omit at to convert now.

GET
api.parseapi.com/time/{timezone}?to={timezone}&at={time}
Convert a local time or an exact instant to another timezone
Explore
Parameters 7
timezonestring · path · required

IANA timezone identifier. Slashes may be literal or URL-encoded

atstring · query · optional

ISO date and time with up to three fractional-second digits; defaults to now. Unix numbers are not accepted as input. An explicit Z or UTC offset identifies an instant. With to= or targets=, no offset means source-zone wall time; without either, no offset means UTC. By default, repeated wall times select the earlier occurrence and skipped times advance by the offset gap. Use disambiguation to choose another policy. Invalid calendar dates return 400.

tostring · query · optional

Destination IANA timezone. Appends to with local at, unix, timezone, abbreviation, offset, and dst for the same instant. deep=true adds name, offset_minutes, and offset_seconds inside to.deep.

disambiguationstring · query · optional

For offsetless at with to or targets: compatible selects the earlier repeated time and advances skipped times by the clock gap; earlier or later chooses the earlier or later instant; reject returns HTTP 400 ambiguous_time for a repeat or nonexistent_time for a gap. Branch on code, then ask for a choice before retrying. Valid values do not alter an explicit-offset instant, now, or the UTC interpretation without a destination. Invalid policies return 400 invalid_request.

Default: compatible

Values: compatible, earlier, later, reject

targetsstring · query · optional

Comma-separated list of 1–10 IANA destination identifiers, instead of to. Appends an ordered targets array with one compact clock per requested zone. Duplicates stay in place, all unix values match, and any unknown zone rejects the whole request. One pooled request for the entire conversion. deep=true adds numeric offsets and a name to each target.

deepboolean · query · optional

Friendly zone name, numeric offsets, clock changes, seasonal boundaries, rules edition and local-time resolution. Included on every plan, with no additional charge.

Values: true

langstring · query · optional

Display language as one BCP 47 tag, such as fr or zh-Hant. Changes supported display labels only; IDs, codes, native names, facts, parsing and deep access stay unchanged. Omit for the original response. Unsupported regions use the supported language base; unsupported languages or scripts use English. Missing labels retain their source value. Accept-Language is not read automatically. Available on the current API contract; frozen 1.0.0 is unchanged.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time("America/New_York", { at: "2026-08-29T15:00", to: "Asia/Tokyo", disambiguation: "reject" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone": "America/New_York",
  "abbreviation": "EDT",
  "offset": "-04:00",
  "dst": true,
  "at": "2026-08-29T15:00:00-04:00",
  "unix": 1788030000,
  "to": {
    "timezone": "Asia/Tokyo",
    "abbreviation": "JST",
    "offset": "+09:00",
    "dst": false,
    "at": "2026-08-30T04:00:00+09:00",
    "unix": 1788030000
  }
}

Several destinations, one instant

Use targets=Europe/London,Asia/Tokyo instead of to to convert to up to ten zones in one pooled request. SDKs accept a list. The targets array preserves your order and duplicates; every entry has the same unix value as the source. An invalid zone rejects the whole request. Both destination options also work with coordinates. An unresolved source coordinate returns targets: null.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time("America/New_York", { at: "2026-08-29T15:00", disambiguation: "reject", targets: ["Europe/London", "Asia/Tokyo"] });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone": "America/New_York",
  "at": "2026-08-29T15:00:00-04:00",
  "unix": 1788030000,
  "offset": "-04:00",
  "abbreviation": "EDT",
  "dst": true,
  "targets": [
    {
      "timezone": "Europe/London",
      "at": "2026-08-29T20:00:00+01:00",
      "unix": 1788030000,
      "offset": "+01:00",
      "abbreviation": "BST",
      "dst": true
    },
    {
      "timezone": "Asia/Tokyo",
      "at": "2026-08-30T04:00:00+09:00",
      "unix": 1788030000,
      "offset": "+09:00",
      "abbreviation": "JST",
      "dst": false
    }
  ]
}

With to or targets, a timestamp without a UTC offset reads as wall time in the source timezone. A repeated time when clocks move back selects the earlier occurrence. A skipped time when clocks move forward advances by the size of the gap. Include an explicit offset to choose an exact instant. Without either destination option, an offsetless timestamp reads as UTC. Invalid dates return 400 instead of rolling into another month.

Choose what happens at a clock change

For a local time supplied with to or targets, add disambiguation=reject to return HTTP 400 ambiguous_time when that time happens twice, or nonexistent_time when it was skipped. Ask the user to choose an occurrence or a different time before scheduling it. An explicit Z or UTC offset always identifies one instant and needs no disambiguation.

Branch on the error code, never its message. After the user chooses, resend the same input with disambiguation=earlier or later. An explicit offset also identifies the occurrence. The interactive converter asks first; the API keeps compatible as its default for existing integrations.

disambiguationRepeated timeSkipped time
compatible (default)Earlier occurrenceMove forward by the gap
earlierEarlier occurrenceMove back by the gap
laterLater occurrenceMove forward by the gap
reject400 error400 error

New York repeats 01:30 on November 1, 2026. This request chooses the second occurrence, at 06:30 UTC. The default chooses 05:30 UTC. Change disambiguation to reject to see the error. On March 8, 2026, 02:30 in New York does not exist: reject returns an error, earlier returns 01:30, and later returns 03:30.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time("America/New_York", { at: "2026-11-01T01:30", to: "UTC", disambiguation: "later" });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone": "America/New_York",
  "at": "2026-11-01T01:30:00-05:00",
  "unix": 1793514600,
  "offset": "-05:00",
  "abbreviation": "EST",
  "dst": false,
  "to": {
    "timezone": "UTC",
    "at": "2026-11-01T06:30:00+00:00",
    "unix": 1793514600,
    "offset": "+00:00",
    "abbreviation": "UTC",
    "dst": false
  }
}

See how the local time was resolved

Add deep=true to get deep.resolution for an offsetless conversion. Its kind is unique, overlap, or gap; policy records the selected policy and adjustment_seconds records the signed change to the requested wall clock. For a gap or overlap, alternatives contains the earlier and later answers, in instant order, with offset-bearing at, unix seconds and offset. A unique time has no alternatives.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time("America/New_York", { at: "2026-03-08T02:30", to: "UTC", deep: true });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone": "America/New_York",
  "at": "2026-03-08T03:30:00-04:00",
  "unix": 1772955000,
  "offset": "-04:00",
  "abbreviation": "EDT",
  "dst": true,
  "to": {
    "timezone": "UTC",
    "at": "2026-03-08T07:30:00+00:00",
    "unix": 1772955000,
    "offset": "+00:00",
    "abbreviation": "UTC",
    "dst": false,
    "deep": {
      "name": "GMT+00:00",
      "offset_minutes": 0,
      "offset_seconds": 0
    }
  },
  "deep": {
    "name": "Eastern Time",
    "offset_minutes": -240,
    "offset_seconds": -14400,
    "next_dst": {
      "at": "2026-11-01T06:00:00.000Z",
      "dst": false,
      "offset": "-05:00",
      "abbreviation": "EST"
    },
    "timezone_database_version": "2026c",
    "resolution": {
      "kind": "gap",
      "policy": "compatible",
      "adjustment_seconds": 3600,
      "alternatives": [
        {
          "at": "2026-03-08T01:30:00-05:00",
          "unix": 1772951400,
          "offset": "-05:00"
        },
        {
          "at": "2026-03-08T03:30:00-04:00",
          "unix": 1772955000,
          "offset": "-04:00"
        }
      ]
    }
  }
}

A gap has no matching instant: its alternatives move the wall clock back or forward by the gap. Resolution is null for now, explicit-offset inputs, lookups without a destination, and unresolved source coordinates. Keep the exact returned at when milliseconds matter; unix contains whole seconds.

The option also works with coordinates. Without a destination option, offsetless at still means UTC. Valid disambiguation values have no effect on that interpretation, explicit-offset instants, or now. An unknown option value returns 400.

Plan for the whole clock change

Source Deep separates standard_offset_seconds from dst_offset_seconds; their sum is the actual offset.season describes the current interval carrying the DST rule flag, or the next one starting within 400 days. Its start and end include the UTC boundary, the wall clock before and after the change, and signed change_seconds. The before/after values describe one boundary under each offset. An unavailable boundary stays null; a zone with no known interval has a null season. Negative seasonal adjustments and double daylight saving keep their actual values. Political changes without the DST flag remain separate from seasons.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time("America/New_York", { at: "2026-06-01T12:00:00Z", deep: true });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone": "America/New_York",
  "at": "2026-06-01T08:00:00-04:00",
  "unix": 1780315200,
  "offset": "-04:00",
  "abbreviation": "EDT",
  "dst": true,
  "deep": {
    "name": "Eastern Time",
    "offset_minutes": -240,
    "offset_seconds": -14400,
    "next_dst": {
      "at": "2026-11-01T06:00:00.000Z",
      "dst": false,
      "offset": "-05:00",
      "abbreviation": "EST"
    },
    "timezone_database_version": "2026c",
    "resolution": null,
    "standard_offset": "-05:00",
    "standard_offset_seconds": -18000,
    "dst_offset_seconds": 3600,
    "season": {
      "start": {
        "at": "2026-03-08T07:00:00.000Z",
        "before": {
          "at": "2026-03-08T02:00:00-05:00",
          "offset": "-05:00",
          "offset_seconds": -18000,
          "abbreviation": "EST",
          "dst": false
        },
        "after": {
          "at": "2026-03-08T03:00:00-04:00",
          "offset": "-04:00",
          "offset_seconds": -14400,
          "abbreviation": "EDT",
          "dst": true
        },
        "change_seconds": 3600
      },
      "end": {
        "at": "2026-11-01T06:00:00.000Z",
        "before": {
          "at": "2026-11-01T02:00:00-04:00",
          "offset": "-04:00",
          "offset_seconds": -14400,
          "abbreviation": "EDT",
          "dst": true
        },
        "after": {
          "at": "2026-11-01T01:00:00-05:00",
          "offset": "-05:00",
          "offset_seconds": -18000,
          "abbreviation": "EST",
          "dst": false
        },
        "change_seconds": -3600
      }
    }
  }
}

Timestamp precision and timezone rules

at accepts ISO dates and times with up to three fractional-second digits, not Unix numbers. unix is output in whole seconds, rounded down. Nonzero milliseconds stay in at. Save deep.timezone_database_version with the returned instant to identify the actual IANA rules edition behind that answer. The Time help and zone list also report it. Future clock changes follow that edition; governments can revise them. A fixed instant can have a different local rendering after a rules update.

Coordinates use the bundled geographic timezone boundaries. A past at changes the clock rules, not the geographic boundaries used to select the zone. The rules edition identifies offsets and transitions; friendly display names use the host’s verified ICU labels and can differ across runtime versions.

The dst flag follows timezone rules, including negative daylight-saving adjustments. Use offset and at for the actual local clock. Historical zones can have offsets with seconds. deep.offset_seconds is exact;deep.offset_minutes keeps whole minutes for existing clients. When at has an offset such as +00:09:21, use unixin parsers that only accept whole-minute offsets. In JavaScript, that is new Date(unix * 1000).

Response fields

latitude
Input or resolved location latitude. Null if there is no single coordinate; omitted for timezone-only requests
longitude
Input or resolved location longitude. Null if there is no single coordinate; omitted for timezone-only requests
timezone
IANA timezone id. Nautical Etc/GMT zone over open ocean
abbreviation
Timezone-rule abbreviation, such as EDT or JST; some zones use numeric labels. Not a unique timezone identifier
offset
UTC offset as ±HH:MM. Historical subminute offsets include :SS
dst
Daylight-saving indicator from the timezone rules at the reference time, including negative seasonal adjustments
at
Local date and time as ISO 8601 with the resolved UTC offset. Always present; now unless ?at= selects a moment. Null for an ambiguous or unresolved source location
to
With ?to= only: the other zone evaluated at the same instant
unix
Unix timestamp in seconds for the resolved instant. Always present; fractional seconds round down. Null for an ambiguous or unresolved source location
to.at
The converted local date and time, ISO with its UTC offset
to.unix
The same Unix timestamp as unix: both zones describe one instant
targets
With targets= instead of to=: ordered array of 1–10 destination clocks, each with timezone, at, unix, offset, abbreviation and dst. Duplicates stay in place; every unix matches the source. Null if the source location is ambiguous or unresolved
location
For explicit place inputs: input, status (resolved, ambiguous or not_found), candidates, truncated and source. Ambiguous/missing locations retain null clock fields. Choose a candidate timezone explicitly

Existing /timezone integrations continue to work. Use /time for new integrations.

Deep

?deep=true Friendly zone name, numeric offsets, clock changes, seasonal boundaries, rules edition and local-time resolution. Included on every plan, with no additional charge.

Run uses the free demo on API 2.0.0. Copied code uses your API key when signed in, or YOUR_API_KEY when signed out.

import { parseAPI } from '@parseapi/sdk';

const parse = parseAPI("YOUR_API_KEY");
const result = await parse.time("America/New_York", { at: "2026-08-29T19:00:00Z", deep: true });
console.log(result);

Run on your server with a secret key. Calling from a browser or app?

Example response
{
  "timezone": "America/New_York",
  "abbreviation": "EDT",
  "offset": "-04:00",
  "dst": true,
  "at": "2026-08-29T15:00:00-04:00",
  "unix": 1788030000,
  "deep": {
    "name": "Eastern Time",
    "offset_minutes": -240,
    "offset_seconds": -14400,
    "next_dst": {
      "at": "2026-11-01T06:00:00.000Z",
      "dst": false,
      "offset": "-05:00",
      "abbreviation": "EST"
    },
    "timezone_database_version": "2026c",
    "resolution": null
  }
}

Deep fields

deep.name
Friendly / generic name (e.g. Eastern Time)
deep.offset_minutes
UTC offset in whole minutes, truncated toward zero
deep.offset_seconds
Exact UTC offset in seconds, including historical subminute offsets
deep.next_dst
Next offset transition after the reference time, or null
targets[].deep
With deep=true: name, offset_minutes and offset_seconds for this destination
deep.timezone_database_version
The actual pinned IANA rules edition used for this answer; present in source deep only
deep.resolution
For offsetless conversion: kind (unique, overlap or gap), applied policy, signed adjustment_seconds, and earlier/later alternatives with at, unix and offset. Unique times have an empty alternatives array. Null for now, explicit offsets, no destination or an unresolved source location
deep.standard_offset
Standard UTC offset at the requested instant, as ±HH:MM[:SS]. Null when unresolved
deep.standard_offset_seconds
Exact standard UTC offset in seconds, from the same timezone rules
deep.dst_offset_seconds
Actual offset minus standard offset, in seconds. Preserves zero, negative saving and double daylight saving
deep.season
Current DST-flag interval, or next interval starting within 400 days. start and end each contain the UTC boundary, before/after local clocks and change_seconds; each boundary can independently be null. Null when no interval is known

Display language

Pass lang with a language tag such as fr, pt-BR, or zh-Hant. Requested deep.name for the returned timezone and any conversion target, using the timezone rules at that same instant. Timezone IDs, times, offsets and DST facts stay unchanged.

Omitting lang preserves the original response. Codes, IDs, numeric facts and native-name fields stay unchanged. Missing translations keep their existing source value; unknown values stay null. A preserved name_local may equal the translated name.

Send a chosen browser preference explicitly, for example { lang: navigator.language } in your JavaScript SDK options. The API does not read Accept-Language automatically. Unsupported regions fall back to their supported base language; unsupported languages or scripts use English. Empty, invalid or repeated tags return 400.

Content-Language identifies languages used in translated display fields and known English fallbacks. This option follows the current API contract. Requests selecting frozen 1.0.0 retain that contract. Select API 2.0.0 to use display language.

41 display language choices
Language tagLanguage
enAmerican English
zh-Hans简体中文
frfrançais (France)
deDeutsch
ititaliano
ja日本語
ko한국어
esespañol de España
arالعربية
bgбългарски
cacatalà
hrhrvatski
csčeština
dadansk
nlNederlands
fisuomi
elΕλληνικά
heעברית
hiहिन्दी
humagyar
idIndonesia
kkқазақ тілі
msMelayu
nbnorsk bokmål
plpolski
ptportuguês (Brasil)
roromână
ruрусский
skslovenčina
svsvenska
thไทย
trTürkçe
ukукраїнська
viTiếng Việt
zh-Hant繁體中文
en-AUAustralian English
en-GBBritish English
fr-CAfrançais canadien
es-419español latinoamericano
pt-PTportuguês europeu
zh-Hant-HK繁體中文(中國香港特別行政區)

Build with Time

All tutorials →

Questions? Email