BDE 4.14.0 Production release
Loading...
Searching...
No Matches
baltzo::ZoneinfoUtil Struct Reference

#include <baltzo_zoneinfoutil.h>

Static Public Member Functions

static int convertUtcToLocalTime (bdlt::DatetimeTz *resultTime, Zoneinfo::TransitionConstIterator *resultTransition, const bdlt::Datetime &utcTime, const Zoneinfo &timeZone)
 
static void loadRelevantTransitions (Zoneinfo::TransitionConstIterator *firstResultTransition, Zoneinfo::TransitionConstIterator *secondResultTransition, LocalTimeValidity::Enum *resultValidity, const bdlt::Datetime &localTime, const Zoneinfo &timeZone)
 
static bool isWellFormed (const Zoneinfo &timeZone)
 

Detailed Description

This struct provides a namespace for utility operations using a Zoneinfo object.

Member Function Documentation

◆ convertUtcToLocalTime()

static int baltzo::ZoneinfoUtil::convertUtcToLocalTime ( bdlt::DatetimeTz resultTime,
Zoneinfo::TransitionConstIterator resultTransition,
const bdlt::Datetime utcTime,
const Zoneinfo timeZone 
)
static

Load, into the specified resultTime, the local date-time value, in the specified timeZone, corresponding to the specified utcTime, and load, into the specified resultTransition, an iterator referring to the first transition in timeZone whose transition-time is before utcTime. Return 0 on success, and baltzo::ErrorCode::k_OUT_OF_RANGE if resultTime would be outside of the legal range that a bdlt::DatetimeTz can represent. The behavior is undefined unless isWellFormed(timeZone) is true.

◆ isWellFormed()

static bool baltzo::ZoneinfoUtil::isWellFormed ( const Zoneinfo timeZone)
static

Return true if the specified timeZone is a well-formed Zoneinfo object (which can be used by other methods on this utility), and false otherwise. For a Zoneinfo to be considered well-formed all of the following must be true:

  1. timeZone.numTransitions() > 0
  2. The first transition in timeZone is at the first representable bdlt::Datetime value, "Jan 01, 0001 00 00.000" – i.e., bdlt::Datetime(1, 1, 1).
  3. There is no transition in the ordered sequence of transitions described by timeZone where the local clock time is adjusted (either forwards or backwards) introducing a period of invalid or ambiguous local times, where that range of invalid or ambiguous local times overlaps with a range of invalid or or ambiguous local times introduced by the subsequent transition (see component documentation for an illustration).

Note that this method has linear worst-case time complexity with respect to timeZone.numTransitions().

◆ loadRelevantTransitions()

static void baltzo::ZoneinfoUtil::loadRelevantTransitions ( Zoneinfo::TransitionConstIterator firstResultTransition,
Zoneinfo::TransitionConstIterator secondResultTransition,
LocalTimeValidity::Enum resultValidity,
const bdlt::Datetime localTime,
const Zoneinfo timeZone 
)
static

Load, into the specified firstResultTransition, an iterator referring to the transition describing the characteristics of local time in effect at the specified localTime in the specified timeZone; in instances where localTime is not both a unique and valid local time in timeZone, load, into the specified secondResultTransition, an iterator referring to a subsequent transition describing the alternative characteristics of local time that could also apply to localTime; finally load, into the specified resultValidity, the validity of localTime as being unique, ambiguous but valid, or invalid. If resultValidity is e_VALID_UNIQUE, then firstResultTransition and secondResultTransition will be loaded with the same transition, otherwise the returned transitions will be distinct with secondResultTransition referring to the transition immediately after firstResultTransition. The behavior is undefined unless isWellFormed(timeZone) is true, and firstResultTransition != secondResultTransition.


The documentation for this struct was generated from the following file: