12 Haziran 2018 Salı

date_time posix_time::ptime Sınıfı

ptime Sınıfı
Giriş
Şu satırı dahil ederiz.
#include <boost/date_time/posix_time/posix_time.hpp>
gregorian::date + time_duration alanlarına sahiptir gibi düşünülebilir. Bu sınıf saat dilimini bilmez. Yani time zone aware değildir. Sadece tick sayısı bilir. Yani UTC'dir. Açıklaması şöyle.
By default the posix_time system uses a single 64 bit integer internally to provide a microsecond level resolution. As an alternative, a combination of a 64 bit integer and a 32 bit integer (96 bit resolution) can be used to provide nano-second level resolutions.
constructor - default
Açıklaması şöyle
The default constructor initializes it to boost::posix_time::not_a_date_time. There is a member function to check for that t.is_not_a_date_time().
Şöyle yaparız.
boost::posix_time::ptime t;
std::cout << std::boolalpha
          << foo.t.is_not_a_date_time() << '\n';
constructor - clock
Örnek
Şöyle yaparız. . std::time tabanlıdır
ptime p = second_clock::local_time();
Örnek
Şu satırı dahil ederiz.
#include <boost/date_time/local_time/local_time.hpp>
Şöyle yaparız. Windows'ta GetSystemTimeAsFileTime() tabanlıdır.
ptime p = microsec_clock::local_time();
Şöyle yaparız.
ptime p = microsec_clock::universal_time();
Örnek
Şöyle yaparız.
std::cout << "System time: " 
  << boost::get_system_time() << std::endl;
std::cout << "Local time: " 
  << boost::posix_time::microsec_clock::local_time() << std::endl;
Çıktı olarak şunu alırız.
System time: 2017-Jun-07 08:47:58.836677
Local time: 2017-Jun-07 11:47:58.837003
constructor - gregorian date
Şöyle yaparız.
ptime p { {2016,4,1}, {10,15,2} };
Şöyle yaparız.
ptime ep (boost::gregorian::date(1970,1,1));
date metodu
Date kısmını döner. Şöyle yaparız. d nesnesini yazdırırsak çıktı olarak şunu alırız. "2016-Sep-19"
date d = p.date();
operator + metodu - date
Şu satırı dahil ederiz.
#include <boost/date_time/gregorian/gregorian.hpp>
Şöyle yaparız.
int iOffset = ...;
ptime now = ...;
ptime newTime = now + days (iOffset);
operator - metodu - ptime
Şöyle yaparız.
ptime p1 = ...;
ptime p2 = ...; 

time_duration t = p2 - p1;
operator >> metodu
Şu satırı dahil ederiz.
#include <boost/date_time/posix_time/posix_time_io.hpp>
Elimizde şöyle bir string olsun
std::string s = "2016-04-14T07:47:50.120043Z";
Şöyle yaparız.
ptime pt;
std::istringstream is (s);
auto* f = new boost::posix_time::time_input_facet("...");
std::locale loc (std::locale(""), f);
is.imbue (loc);
is >> pt;
operator << metodu
Örnek
Şöyle yaparız.
std::stringstream ss;
std::locale loc = std::locale("");
sss.imbue (std::locale (loc,new time_facet("...")));
ptime now = ...;
ss << now;
Örnek
Şöyle yaparız.
std::time_t btime_ = 1505790902; //This is epoch time read from "/proc/stat" file.

std::cout << boost::posix_time::from_time_t(btime_) << "\n";
cout'a çıktı formatı verilmediği için çıktı olarak şunu alırız.
2017-Sep-19 03:15:02
Örnek
Şöyle yaparız. cout'a çıktı formatı olarak sadece saat verildiği için saati bilgisi yazdırılır.
#include <boost/date_time/posix_time/posix_time_io.hpp>

namespace pt = boost::posix_time;

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";
Çıktı olarak şunu alırız
03:15:02
time_of_day metodu
time_duration yani Time (gece yarısından itibaren geçen süre) kısmını döner. Şöyle yaparız. t nesnesini yazdırırsak çıktı olarak şunu alırız. "17:49:19"
time_duration t = p.time_of_day ();
Free Style Metodlar
from_time_t metodu
Şöyle yaparız
std::time_t btime_ = 1505790902; // This is epoch time read from "/proc/stat" file.
boost::posix_time::ptime const pt = boost::posix_time::from_time_t(btime_);
time_from_string metodu
time_from_string metodu yazısına taşıdım.

to_tm metodu
Şöyle yaparız.
boost::posix_time::ptime time;
std::tm time_tm = to_tm(time);
time_t posix_time = mktime(&time_tm);
to_time_t metodu
Şöyle yaparız.
boost::posix_time::ptime& pt = ...;
time_t tt = to_time_t (pt);






Hiç yorum yok:

Yorum Gönder