24 Aralık 2017 Pazar

date Kütüphanesi

Giriş
Şu satırı dahil ederiz.
#include "date.h"
Şu satırı dahil ederiz.
using namespace date;
using namespace std::chrono_literals;
Bu kütüphane Howard Hinnat tarafından geliştirilmiş. IANA tarafından güncellenen TZ veritabanını kullanıyor.

parse metodu
Bu metod her zaman bir istringstream ile beraber kullanılır. isringstream'den okuyarark parse işlemini gerçekleştirir.parse işleminin sonucunu stream'in fail() metodu ile alırız. Açıklaması şöyle.
The precision of the parse is controlled by the precision of the time_point that you input into the parse function, instead of by a formatting flag. The parse will attempt to parse as many decimal digits as your time_point will hold, but will gracefully give up if it gets less digits
Örnek - date::year_month_day
date::year_month_day parse etmek için şöyle yaparız.
const std::string str = ...;

static vector<string> date_formats
{
  "%Y-%m-%d",
  "%Y/%m/%d",
  "%m-%d-%Y",
  "%m/%d/%Y",
  "%d-%b-%Y",
  "%Y%m%d"
};

istringstream is;
date::year_month_day dt;
size_t i;
for (i = 0; i < date_formats.size(); ++i)
{
  is.clear();
  is.str(str);
  is >> date::parse(date_formats[i], dt);
  if (!is.fail())
  {
    std::cout << dt.year() << "\t" << dt.month() << "\t" << dt.day();
  
  }
}
Örnek - date::sys_time
date::sys_time parse etmek için şöyle yaparız.
sys_time<nanoseconds> tp; // type-alias for a system_clock::time_point
                          //   with nanoseconds precision
ss >> date::parse("%FT%TZ", tp);  // still ok
Örnek - date::sys_seconds
date::sys_seconds parse etmek için şöyle yaparız.
std::string str= "2017-01-31T02:15:63Z";
std::string format = "%Y-%m-%dT%H:%M:%SZ";
std::stringstream ss {str};
date::sys_seconds outputTime;
ss >> date::parse(format, outputTime);
if (ss.fail())
{
  std::cout << "Failure" << std::endl;
}
using date::operator<<;
std::cout << outputTime << std::endl;
Çıktı olarak şunu alırızçünkü saniye 63 verilmiştir.
Failure
1970-01-01 00:00:00
Örnek  - date::local_seconds
date::local_seconds parse etmek için şöyle yaparız.
date::local_seconds tp;
std::istringstream in{"2017-09-08 11:30:15"};
in >> date::parse("%Y-%m-%d %H:%M:%S", tp);
Örnek - std::chrono::system_clock::time_point
Açıklaması şöyle.
"%F" is a shortcut for "%Y-%m-%d". You can use either.
"%T" is a shortcut for "%H:%M:%S". You can use either.
std::chrono::system_clock::time_point parse etmek için şöyle yaparız.
std::chrono::system_clock::time_point tp;
std::istringstream ss{"2010-12-30T01:20:30.123456Z"};
ss >> date::parse("%FT%TZ", tp);
assert(!ss.fail());
operator << metodu
clock sınıflarının stream'e yazdırılabilmesini sağlar. Şöyle yaparız.
#include <iostream>
#include <chrono>
#include "date.h"

typedef std::chrono::high_resolution_clock high_resolution_clock;

using date::operator<<;

int main()
{
  std::cout << high_resolution_clock::now() << std::endl;  // works!!
}
Çıktı olarak şunu alırız.
2017-09-22 10:48:50.749896053
year_month_day Sınıfı
Constructor
Şöyle yaparız
auto d1 = 1500_y/jun/1;
auto d2 = 4500_y/jun/1;
day metodu
Şöyle yaparız.
date::year_month_day dt = ...;
std::cout << dt.day();
month metodu
Şöyle yaparız.
date::year_month_day dt = ...;
std::cout << dt.month();
operator<< metodu
Şöyle yaparız
auto d1 = 1500_y/jun/1;

std::cout << d1 <<'\n';
Çıktı olarak şunu alırız
1500-06-01
operator+ metodu
Şöyle yaparız
using namespace date;
auto d1 = 1500_y/jun/1;
const auto duration = years{3000};
const auto d3 = d1 + duration;
year metodu
Şöyle yaparız.
date::year_month_day dt = ...;
std::cout << dt.year();
duration Sınıfları
date durations yazısına taşıdım.

time_points Sınıfları
date time_points yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder