9b5d99078e
[SVN r43422]
104 lines
3.7 KiB
XML
104 lines
3.7 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
|
|
"../../../tools/boostbook/dtd/boostbook.dtd">
|
|
|
|
<!-- Copyright (c) 2001-2004 CrystalClear Software, Inc.
|
|
Subject to the Boost Software License, Version 1.0.
|
|
(See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
|
-->
|
|
|
|
<section id="date_time.examples.local_utc_conversion">
|
|
<title>Local to UTC Conversion</title>
|
|
|
|
<para>
|
|
Demonstrate utc to local and local to utc calculations including dst.
|
|
</para>
|
|
<programlisting>
|
|
<![CDATA[
|
|
|
|
/* Demonstrate conversions between a local time and utc
|
|
* Output:
|
|
*
|
|
* UTC <--> New York while DST is NOT active (5 hours)
|
|
* 2001-Dec-31 19:00:00 in New York is 2002-Jan-01 00:00:00 UTC time
|
|
* 2002-Jan-01 00:00:00 UTC is 2001-Dec-31 19:00:00 New York time
|
|
*
|
|
* UTC <--> New York while DST is active (4 hours)
|
|
* 2002-May-31 20:00:00 in New York is 2002-Jun-01 00:00:00 UTC time
|
|
* 2002-Jun-01 00:00:00 UTC is 2002-May-31 20:00:00 New York time
|
|
*
|
|
* UTC <--> Arizona (7 hours)
|
|
* 2002-May-31 17:00:00 in Arizona is 2002-Jun-01 00:00:00 UTC time
|
|
*/
|
|
|
|
#include "boost/date_time/posix_time/posix_time.hpp"
|
|
#include "boost/date_time/local_time_adjustor.hpp"
|
|
#include "boost/date_time/c_local_time_adjustor.hpp"
|
|
#include <iostream>
|
|
|
|
int
|
|
main()
|
|
{
|
|
using namespace boost::posix_time;
|
|
using namespace boost::gregorian;
|
|
|
|
//This local adjustor depends on the machine TZ settings-- highly dangerous!
|
|
typedef boost::date_time::c_local_adjustor<ptime> local_adj;
|
|
ptime t10(date(2002,Jan,1), hours(7));
|
|
ptime t11 = local_adj::utc_to_local(t10);
|
|
std::cout << "UTC <--> Zone base on TZ setting" << std::endl;
|
|
std::cout << to_simple_string(t11) << " in your TZ is "
|
|
<< to_simple_string(t10) << " UTC time "
|
|
<< std::endl;
|
|
time_duration td = t11 - t10;
|
|
std::cout << "A difference of: "
|
|
<< to_simple_string(td) << std::endl;
|
|
|
|
|
|
//eastern timezone is utc-5
|
|
typedef boost::date_time::local_adjustor<ptime, -5, us_dst> us_eastern;
|
|
|
|
ptime t1(date(2001,Dec,31), hours(19)); //5 hours b/f midnight NY time
|
|
|
|
std::cout << "\nUTC <--> New York while DST is NOT active (5 hours)"
|
|
<< std::endl;
|
|
ptime t2 = us_eastern::local_to_utc(t1);
|
|
std::cout << to_simple_string(t1) << " in New York is "
|
|
<< to_simple_string(t2) << " UTC time "
|
|
<< std::endl;
|
|
|
|
ptime t3 = us_eastern::utc_to_local(t2);//back should be the same
|
|
std::cout << to_simple_string(t2) << " UTC is "
|
|
<< to_simple_string(t3) << " New York time "
|
|
<< "\n\n";
|
|
|
|
ptime t4(date(2002,May,31), hours(20)); //4 hours b/f midnight NY time
|
|
std::cout << "UTC <--> New York while DST is active (4 hours)" << std::endl;
|
|
ptime t5 = us_eastern::local_to_utc(t4);
|
|
std::cout << to_simple_string(t4) << " in New York is "
|
|
<< to_simple_string(t5) << " UTC time "
|
|
<< std::endl;
|
|
|
|
ptime t6 = us_eastern::utc_to_local(t5);//back should be the same
|
|
std::cout << to_simple_string(t5) << " UTC is "
|
|
<< to_simple_string(t6) << " New York time "
|
|
<< "\n" << std::endl;
|
|
|
|
|
|
//Arizona timezone is utc-7 with no dst
|
|
typedef boost::date_time::local_adjustor<ptime, -7, no_dst> us_arizona;
|
|
|
|
ptime t7(date(2002,May,31), hours(17));
|
|
std::cout << "UTC <--> Arizona (7 hours)" << std::endl;
|
|
ptime t8 = us_arizona::local_to_utc(t7);
|
|
std::cout << to_simple_string(t7) << " in Arizona is "
|
|
<< to_simple_string(t8) << " UTC time "
|
|
<< std::endl;
|
|
|
|
return 0;
|
|
}
|
|
|
|
]]>
|
|
</programlisting>
|
|
</section>
|