Converting Between Time Zones

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



C++ Cookbook
Secure Programming Cookbook for C and C++: Recipes for Cryptography, Authentication, Input Validation & More
ISBN: 0596003943
EAN: 2147483647
Year: 2006
Pages: 241

Flylib.com © 2008-2020.
If you may any questions please contact us: flylib@qtcs.net