2013-07-23 24 views
17

kullanılan ostream ilişkili yerele özgü biçimlendirme kurallarını kullanarak mevcut duvar saati yazdırmak için C++ 11 kolay bir yolu var mı? Gerçekten ne yapmak istiyorumC++ 11'deki baskı zamanı nasıl?

böyle bir şeydir:

myStream << std::chrono::system_clock::now(); 

ve myStream ile ilişkilidir ne olursa olsun yerel uygun olarak basılmış tarih ve saati var. C++ 11, put_time sunar, ancak bir biçimlendirme dizesi alır ve biçimin akış ile ilişkilendirilen yerel ayar tarafından belirlenmesini istiyorum. Ayrıca time_put ve time_put_byname, ama cppreference.com de örneklere dayalı, bu işlevler put_time ile birlikte kullanılır var.

onu biçimlendirme elle olmadan zaman noktası değerini yazdırmak için basit bir yolu var mı?

cevap

16

Sen "%c" gibi bir biçim dizesi ile put_time kullanabilirsiniz. %c, yerel ayar için standart tarih ve saat dizesinin biçim belirtecidir. Sonuç makinemde "Tue Jul 23 19:32:18 CEST 2013" e benziyor (bir Alman timezonu içinde POSIX en_US yerel ayarı).

auto now = std::chrono::system_clock::now(); 
auto now_c = std::chrono::system_clock::to_time_t(now); 
std::cout << std::put_time(std::localtime(&now_c), "%c") << '\n'; 
+9

Ayrıca, datetime verilerini yazdırmanın * modern * yolu olmadığından şaşıyorum. Eski tarz C API'lerini kullanmalıyız. Ama, 'std :: chrono' datetime konularda büyük bir ilerlemedir. Ama zaman baskısı C++ 11 yolu yok mu? (Bu zaman baskılara ya da başka nedenlerle bağlı olsaydı emin değilim) – Manu343726

+5

Manu343726 @ (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html) standardize edilmemiştir. –

+0

@RMartinhoFernandes Teşekkürler! Bunu bilmiyordum. – Manu343726