2 Ekim 2017 Pazartesi

date_time gregorian::date_input_facet Sınıfı

Giriş
Şu satırları dahil ederiz.
#include <boost/date_time.hpp>
#include <boost/date_time/gregorian/gregorian_io.hpp>
boost::gregorian::date nesnesini stream'den okumak için kullanılır.

Constructor - char * 
Şöyle yaparız.
auto facet = new boost::gregorian::date_input_facet ("%m/%d/%Y");
Kullanım
Daha sonra facet bir locale nesnesine geçilir. Şöyle yaparız.
std::locale fmt (std::locale::classic(),facet);
locale ise bir stream' geçilir ve stream'den okuma yapılır.
std::istringstream is = ...;
is.imbue (fmt);
boost::gregorian::date date;
is >> date;
Örnek
Şöyle yaparız.
const std::vector<std::locale> Date::date_formats = {
  std::locale(std::locale::classic(), new date_input_facet("%Y-%m-%d")),
  std::locale(std::locale::classic(), new date_input_facet("%Y/%m/%d")),
  std::locale(std::locale::classic(), new date_input_facet("%m-%d-%Y")),
  std::locale(std::locale::classic(), new date_input_facet("%m/%d/%Y")),
  std::locale(std::locale::classic(), new date_input_facet("%d-%b-%Y")),
  std::locale(std::locale::classic(), new date_input_facet("%Y%m%d")),
};
Örnek
Şöyle yaparız.
std::string str =  "20161101";
std::string format = "%Y%m%d";

const std::locale loc = std::locale(std::locale(), 
                   new boost::gregorian::date_input_facet(format.c_str()));

 
std::istringstream is (str); 
is.imbue (loc);


boost::gregorian::date d; 
is.exceptions(~std::ios::iostate::_S_goodbit);
is >> d; 
Eğer günü yazdırırsak
std::cout << d;
Çıktı olarak şunu alırız
2016-Nov-01
Örnek
Şöyle yaparız.
const std::locale fmt (std::locale::classic(),
                       new boost::gregorian::date_input_facet("%m/%d/%Y"));
boost::gregorian::date MMDDYYYYasDate( const std::string& str)
{
  std::istringstream is(str);
  is.imbue (fmt);
  boost::gregorian::date date;
  is >> date;
  return date;
}


Hiç yorum yok:

Yorum Gönder