Problem
You want to convert the current time from one time zone to another.
Solution
To convert between time zones, use the time zone conversion routines from the Boost date_time library. Example 5-8 shows how to finds the time in Tucson, Arizona given a time in New York City.
Example 5-8. Converting between time zones
#include #include #include #include using namespace std; using namespace boost::gregorian; using namespace boost::date_time; using namespace boost::posix_time; typedef local_adjustor EasternTZ; typedef local_adjustor ArizonaTZ; ptime NYtoAZ(ptime nytime) { ptime utctime = EasternTZ::local_to_utc(nytime); return ArizonaTZ::utc_to_local(utctime); } int main( ) { // May 1st 2004, boost::gregorian::date thedate(2004, 6, 1); ptime nytime(thedate, hours(19)); // 7 pm ptime aztime = NYtoAZ(nytime); cout << "On May 1st, 2004, when it was " << nytime.time_of_day( ).hours( ); cout << ":00 in New York, it was " << aztime.time_of_day( ).hours( ); cout << ":00 in Arizona " << endl; }
The program in Example 5-8 outputs the following:
On May 1st, 2004, when it was 19:00 in New York, it was 16:00 in Arizona
Discussion
The time zone conversions in Example 5-8 goes through a two-step process. First, I convert the time to UTC, and then convert the UTC time to the second time zone. Note that the time zones in the Boost date_time library are represented as types using the local_adjustor template class. Each type has conversion functions to convert from the given time zone to UTC (the local_to_utc function), and to convert from UTC to the given time zone (the utc_to_local function).
Building C++ Applications
Code Organization
Numbers
Strings and Text
Dates and Times
Managing Data with Containers
Algorithms
Classes
Exceptions and Safety
Streams and Files
Science and Mathematics
Multithreading
Internationalization
XML
Miscellaneous
Index