29 Mayıs 2018 Salı

std::get_time metodu

Giriş
Şu satırı dahil ederiz.
#include <iomanip>
Broken time yani std::tm yapısını stream'den okumak için kullanılır. Yani bu işlem sonunda tm değişkeni doldurulur. Bu sınıfın tam tersi işlemini std::put_time ile yaparız.

std::get_time C++11 ile gelen yeni bir metod.  std::get_time yerine hep strptime() metodunu kullanıyorduk.  Ancak bu metod Windows'ta mevcut değildi, dolayısıyla kod portable olmuyordu.

%d - day
/%m - month
/%Y - year
%H- hour
%M - minute
%S - second

Gün - Ay - Yıl - Saat - Dakika - Saniye
Şöyle yaparız.
struct tm          t = {};
std::string        dateTimeFormat{"%d/%m/%Y %H:%M:%S"};
std::istringstream ss("22/12/2016 01:12:10");

ss >> std::get_time( &t, dateTimeFormat.c_str() );
Yıl - Ay- Gün
Şöyle yaparız.
std::tm t = {};
std::istringstream ss ("2015-11-27");
if (ss >> std::get_time (&t, "%Y-%m-%d")) {...}
Yıl - Ay - Gün - Saat - Dakika - Saniye
Örnek
Şöyle yaparız. Herhangi bir doğrulama kontrolü yapılmaz.
std::string str = "2016-06-31 02:00:58"; // June 31 2016 does not exist
std::istringstream ss (str);
struct tm t = {}
if (ss >> std::get_time (&t, "%Y-%m-%d %H:%M:%S")) {...}
Örnek
Şöyle yaparız.
std::istringstream time_stream = ...;  // Construct a stream from string
std::tm time;  // Time structure
time_stream >> std::get_time(&time, "%Y-%m-%d %H:%M:%S");  // Fill time struct
Yıl - Ay - Gün - T - Saat - Dakika - Saniye
Elimizde UTC bir zaman olsun. Şöyle yaparız.
std::tm t = {};
std::istringstream ss ("2010-11-04T23:23:01Z");
if (ss >> std::get_time (&t, "%Y-%m-%dT%H:%M:%S")) {...}
Saat - Dakika - Saniye
Şöyle yaparız.
std::tm t{};
std::istringstream ss("01:02:03");
ss.imbue(std::locale("de_DE"));
ss >> std::get_time(&t, "%H:%M:%S");
std::cout << ss.fail() << std::endl;
std::cout << std::put_time(&t, "%c") << '\n';
Çıktı olarak şunu alırız.
1
Sun Jan  0 00:00:00 1900
tm yapısından chrono'ya geçiş
Chrono ile gelen from_time_t() metodunu kullanırız. Şöyle yaparız.
std::tm tm;
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));




Hiç yorum yok:

Yorum Gönder