9b5d99078e
[SVN r43422]
78 lines
2.6 KiB
XML
78 lines
2.6 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-2005 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.seconds_since_epoch">
|
|
<title>Seconds Since Epoch</title>
|
|
|
|
<para>
|
|
Example of calculating seconds elapsed since epoch (1970-Jan-1) using local_date_time.
|
|
</para>
|
|
<programlisting>
|
|
<![CDATA[
|
|
/* This example demonstrates the use of the time zone database and
|
|
* local time to calculate the number of seconds since the UTC
|
|
* time_t epoch 1970-01-01 00:00:00. Note that the selected timezone
|
|
* could be any timezone supported in the time zone database file which
|
|
* can be modified and updated as needed by the user.
|
|
*
|
|
* To solve this problem the following steps are required:
|
|
* 1) Get a timezone from the tz database for the local time
|
|
* 2) Construct a local time using the timezone
|
|
* 3) Construct a posix_time::ptime for the time_t epoch time
|
|
* 4) Convert the local_time to utc and subtract the epoch time
|
|
*
|
|
*/
|
|
|
|
#include "boost/date_time/local_time/local_time.hpp"
|
|
#include <iostream>
|
|
|
|
int main()
|
|
{
|
|
using namespace boost::gregorian;
|
|
using namespace boost::local_time;
|
|
using namespace boost::posix_time;
|
|
|
|
tz_database tz_db;
|
|
try {
|
|
tz_db.load_from_file("../data/date_time_zonespec.csv");
|
|
}catch(data_not_accessible dna) {
|
|
std::cerr << "Error with time zone data file: " << dna.what() << std::endl;
|
|
exit(EXIT_FAILURE);
|
|
}catch(bad_field_count bfc) {
|
|
std::cerr << "Error with time zone data file: " << bfc.what() << std::endl;
|
|
exit(EXIT_FAILURE);
|
|
}
|
|
|
|
time_zone_ptr nyc_tz = tz_db.time_zone_from_region("America/New_York");
|
|
date in_date(2004,10,04);
|
|
time_duration td(12,14,32);
|
|
// construct with local time value
|
|
// create not-a-date-time if invalid (eg: in dst transition)
|
|
local_date_time nyc_time(in_date,
|
|
td,
|
|
nyc_tz,
|
|
local_date_time::NOT_DATE_TIME_ON_ERROR);
|
|
|
|
std::cout << nyc_time << std::endl;
|
|
|
|
ptime time_t_epoch(date(1970,1,1));
|
|
std::cout << time_t_epoch << std::endl;
|
|
|
|
// first convert nyc_time to utc via the utc_time()
|
|
// call and subtract the ptime.
|
|
time_duration diff = nyc_time.utc_time() - time_t_epoch;
|
|
|
|
//Expected 1096906472
|
|
std::cout << "Seconds diff: " << diff.total_seconds() << std::endl;
|
|
|
|
}
|
|
]]>
|
|
</programlisting>
|
|
</section>
|