BDE 4.14.0 Production release
Loading...
Searching...
No Matches
bdlt_timetz

Detailed Description

Outline

Purpose

Provide a representation of a time with time zone offset.

Classes

See also
bdlt_time, bdlt_datetimetz

Description

This component provides a single, simply constrained value-semantic class, bdlt::TimeTz, that represents a time value in a particular time zone. Each bdlt::TimeTz object contains a time zone offset from UTC (in minutes) and a bdlt::Time value in that time zone. For logical consistency, the time value and offset should correspond to a geographically valid time zone, but such consistency is the user's responsibility. This component does not enforce logical constraints on any values.

The localTime and utcTime methods return bdlt::Time values corresponding to the local time and UTC time represented by the object, respectively. In addition, the offset method returns the time zone offset in minutes from UTC (i.e., UTC + offset equals local time).

Attributes

Name Type Default Simple Constraints
------------------ ----------- -------------- ------------------
localTime bdlt::Time '24:00:00.000' none
offset int 0 ( -1440 .. 1440 )
Definition bdlt_time.h:196

Caveats on Time Zone Support

A bdlt::TimeTz value is intended to be interpreted as a value in a local time zone, along with the offset of that value from UTC. However, there are some problems with this simple interpretation. First of all, the offset value may not correspond to any time zone that has ever existed. For example, the offset value could be set to one minute, or to 1,234 minutes. The meaning of the resulting "local time" value is always clear, but the local time might not correspond to any geographical or historical time zone.

For these reasons (and others), this component cannot and does not perform any validation relating to time zones or offsets. The user must take care to honor the "local time" contract of this component.

ISO Standard Text Representation

A common standard text representation of a date and time value is described by ISO 8601. BDE provides the bdlt_iso8601util component for conversion to and from the standard ISO8601 format.

Usage

This section illustrates intended use of this component.

Example 1: Comparing Times from Multiple Time Zones

Some legacy systems may represent points in time as a combination of a local time-of-day plus an offset from UTC, with an underlying assumption that the dates on which points in time occur can be inferred from context. Assuming that we know that two such times fall on the same (local) calendar date, we can determine whether or not the two times coincide by comparing their bdlt::TimeTz representations.

First, we define three bdlt::TimeTz objects representing the time in three different time zones on the same (local) date:

bdlt::TimeTz newYorkTime(bdlt::Time(9, 30, 0, 0.0),
bdlt::TimeTz chicagoTime(bdlt::Time(8, 30, 0, 0.0),
bdlt::TimeTz phoenixTime(bdlt::Time(6, 30, 0, 0.0),
Definition bdlt_timetz.h:190
static const bsls::Types::Int64 k_MINUTES_PER_HOUR
Definition bdlt_timeunitratio.h:209

Then, we observe that the local times are distinct:

assert(newYorkTime.localTime() != chicagoTime.localTime());
assert(chicagoTime.localTime() != phoenixTime.localTime());
assert(phoenixTime.localTime() != newYorkTime.localTime());

Next, we observe that newYorkTime and chicagoTime actually represent the same point in time:

assert(newYorkTime.utcTime() == chicagoTime.utcTime());

Finally, we observe that phoenixTime is one hour earlier than newYorkTime:

newYorkTime.utcTime() - phoenixTime.utcTime();
assert(0 == delta.days());
assert(1 == delta.hours());
assert(0 == delta.minutes());
assert(0 == delta.seconds());
assert(0 == delta.milliseconds());
Definition bdlt_datetimeinterval.h:201
int days() const
Definition bdlt_datetimeinterval.h:1105
int milliseconds() const
Definition bdlt_datetimeinterval.h:1137
int seconds() const
Definition bdlt_datetimeinterval.h:1130
int minutes() const
Definition bdlt_datetimeinterval.h:1123
int hours() const
Definition bdlt_datetimeinterval.h:1117