2017-07-09 28 views
5

Basit soruyu affedin, ama bu saatlerde hiç başarılı olamadım.Std :: string çıktı akışından nasıl oluşturulur?

cout << floor<days>(system_clock::now()); 

baskı gibi bir şey:

2017-07-09 

I bana böyle şeyler yapmanızı sağlar Howard Hinnant tarih lib, kullanıyorum

std::string make_date_string() 

: Im bir işlevi uygulamak için çalışıyor Bir std :: string'e gitmek için bu çıkışı nasıl alabileceğimi anlamaya çalışıyorum, böylece onu fonksiyonumdan geri alabilirim, ama hiçbir yere gitmiyorum.

cevap

6

Std :: string'e gitmek için bu çıkışı nasıl alabileceğimi anlamaya çalışıyorum, böylece onu işlevimden döndürebiliyorum, ancak hiçbir yere ulaşamıyorum. Bir yan not olarak

std::ostringstream oss; 
oss << floor<days>(system_clock::now()); 
std::string time = oss.str(); 

: Bu durumda

bir std::ostringstream kullanabilirsiniz

o

template<typename Fmt> 
floor(std::chrono::timepoint); 

uygulanmaktadır yardımcın fonksiyonu benziyor gibi iostream manipulator olarak, bu olabilir Herhangi bir std::ostream uygulamasıyla kullanılır.

+0

Nihayet yaşadığımız bir yaş, taşınabilir bir şekilde ctime kullanmadan bir tarih/saat dizesi oluşturma görevimi tamamlayabiliyordum! –

3

Kabul edilen yanıt, iyi bir cevaptır (bence bu not düşünüldü). "2017-07-09" biçimde bir std::string oluşturur

#include "date.h" 
#include <string> 

std::string 
make_date_string() 
{ 
    return date::format("%F", std::chrono::system_clock::now()); 
} 

:

Burada, alternatif bir formülasyon using the same library olup. Bu özel formülasyon açıkça bir std::ostringstream inşa etmek zorunda kalmamasıdır güzel olur ve örneğin, istediğiniz gibi biçimi değişebilir kolayca yapabilirsiniz: Şimdi "07/09/2017" döndürür

return date::format("%m/%d/%Y", std::chrono::system_clock::now()); 

.

İlgili konular