4.43. kink/datetime/TIMEZONE

Provides timezone type.

4.43.1. type timezone

A timezone represents the rule of transition of UTC offset in a specific region.

The set of timezones are provided by the runtime.

4.43.1.1. Tz.name

“name” method returns the name of Tz, such as "Asia/Tokyo".

4.43.1.2. Tz.offset_for_instant(Instant)

`offset_for_instant` returns the `offset` valid in the timezone at `Instant`.

Precondition:

• Instant must be an instant.

4.43.1.3. Tz.offset_for_datetime(Datetime $single_cont $overlap_cont $gap_cont)

`offset_for_datetime` produces the `offset`, or the pair of `offset` vals, valid in the timezone at `Datetime`.

Precondition:

• `Datetime` must be `datetime`

Result:

• If there is only one `offset` valid at `Datetime`, `offset_for_datetime` tail-calls $single_cont with the `offset`.

• If there are two `offset` vals valid at `Datetime` due to transition, `offset_for_datetime` tail-calls $overlap_cont with the offset before the transition, and the offset after the transition.

• If there is no `offset` valid at `Datetime` due to transition, `offset_for_datetime` tail-calls $gap_cont with the offset before the transition, and the offset after the transition.

4.43.1.4. Tz.repr

`repr` returns a str representation of `Tz`, such as "(timezone Asia/Tokyo)".

4.43.1.5. Tz1 == Tz2

Two timezone values are equal when they have the same name.

4.43.2. TIMEZONE.for(Name ...[$config])

“for” tries to find the timezone specified by Name.

The fun searches the repository of timezones provided by the runtime.

Preconditions:

• Name must be a str

• $config, if specified, must be a fun which takes a conf val.

The conf val provides the following methods:

• C.on_present($present_cont) : uses $present_cont as the present cont. If the method is not called, VAL.identity is used as the default present cont.

• C.on_absent($absent_cont) : uses $absent_cont as the absent cont. If the method is not called, the default absent cont raises an exception when the timezone is not found.

Result:

• If the timezone is found, “for” tail-calls the present cont with the timezone.

• If the timezone is not found, “for” tail-calls the absent cont with no arg.

Example:

:TIMEZONE.require_from('kink/datetime/')
:CONTROL.require_from('kink/')

stdout.print_line(TIMEZONE.for('Asia/Tokyo').repr) # => Timezone(Asia/Tokyo)

CONTROL.try(
  { TIMEZONE.for('No/Such_Tz') }
  { raise('doesn''t reach here') }
  {(:Exc) stdout.print_line(Exc.message) }
)
# => TIMEZONE.for(Name ...$config): timezone not found: "No/Such_Tz"

Example specifying continuations:

:TIMEZONE.require_from('kink/datetime/')
:CONTROL.require_from('kink/')

TIMEZONE.for('Asia/Tokyo'){(:C)
  C.on_present{(:Tz) stdout.print_line(Tz.repr) }
}
# => Timezone(Asia/Tokyo)

TIMEZONE.for('No/Such_Tz'){(:C)
  C.on_absent{() stdout.print_line('no such tz') }
}
# => no such tz

4.43.3. TIMEZONE.is?(Val)

TIMEZONE.is? returns whether Val is a timezone.

4.43.4. TIMEZONE.default

“default” fun returns the runtime-default timezone.