28 Şubat 2018 Çarşamba

date_time c_local_adjustor

Giriş
Şu satırı dahil ederiz.
#include <boost/date_time/c_local_time_adjustor.hpp>
Tanımlama
Şöyle yaparız.
using adj = boost::date_time::c_local_adjustor<ptime>;
utc_to_local metodu - ptime
ptime saati UTC olarak saklar. UTC saati stream'a yazdırırken yerel saate çevirmek istersek bu metodu kullanırız.

Örnek
Şöyle yaparız. cout çıktısı time_facet ile sadece saat bilgisini yazdırılacak hale getirilir.
#include <boost/date_time/posix_time/posix_time_io.hpp>
#include <boost/date_time/c_local_time_adjustor.hpp>

namespace pt = boost::posix_time;
namespace g  = boost::gregorian;
using local_adj = boost::date_time::c_local_adjustor<pt::ptime>;

int main() {
    std::cout.imbue(std::locale(std::cout.getloc(), new pt::time_facet("%H:%M:%S")));

    std::time_t btime_ = 1505790902; // This is epoch time read from "/proc/stat" file.

    pt::ptime const timestamp = pt::from_time_t(btime_);

    std::cout << timestamp << "\n";

    // This local adjustor depends on the machine TZ settings
    std::cout << local_adj::utc_to_local(timestamp) << " local time\n";
}
Çıktı olarak şunu alırız
+ TZ=CEST
+ ./a.out
03:15:02
03:15:02 local time
+ TZ=MST
+ ./a.out
03:15:02
20:15:02 local time
Örnek
Şöyle yaparız.
#include <boost/filesystem.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
#include <boost/date_time/posix_time/conversion.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/c_local_time_adjustor.hpp>

void PrintTime(boost::filesystem::path _file) {
  using boost::posix_time::ptime;
  using adj = boost::date_time::c_local_adjustor<ptime>;

  time_t const sys_time = last_write_time(_file);
  ptime const utc       = boost::posix_time::from_time_t(sys_time);
  ptime const local     = adj::utc_to_local(utc);

  std::cout << "utc: " << utc << "\n";
  std::cout << "local: " << local << "\n";
  {
    long h{ local.time_of_day().hours() };
    long m{ local.time_of_day().minutes() };
    long s{ local.time_of_day().seconds() };

    //...print h, m, s.
    std::cout << h << ":" << m << ":" << s << '\n';
  }
}
Çıktı olarak şunu alırız.
utc: 2018-Feb-27 15:19:45
local: 2018-Feb-27 16:19:45
16:19:45

Hiç yorum yok:

Yorum Gönder