2009-10-30 20 views
24

C++ stl standart bir zaman sınıfına sahip mi? Ya da bir dize yazmadan önce c-string'e dönüştürmem gerekiyor mu? Ben herhangi bir biçimlendirme olmaksızın bir sayı olarak yazılmasıdır güncel tarih/zaman olsun Bu durumdaC++ 'da standart bir tarih/zaman sınıfı var mı?

 
time_t tm(); 
ostringstream sout; 
sout << tm << ends; 

: Örnek, ben çıkışa bir dize akışına geçerli tarih/zaman istiyorum. stl time_t değerinden örneğini içeren bir zaman sınıf varsa

+2

Komite önünde tam ve modern bir C++ tarih/saat/saat dilimi için bir teklif var: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html . Bu teklif, tam bir uygulama, tam dokümantasyon ve etkin bir kullanıcı topluluğu olan https://github.com/HowardHinnant/date: Bu github deposuna dayanmaktadır. –

cevap

4

bir ctime (& time_t) da vardır ben tm ilk biçimlendirmek için c- çalışma zamanı fonksiyonunu strftime kullanabilirsiniz, ancak gerekli olmamalıdır gibi görünüyor dize çıktı yöntemi (char *).

+1

Tam olarak hangi tarih/saat biçimine * gerekmedikçe yardımcı olmaz. Buna bakmak bana sadece beni ürpertiyor; Bunu bir uygulamada görmek istediğimi sanmıyorum. – Joey

21

STL'nin bir parçası değil ama iyi bilinen kütüphane destekleniyor.

boost::date'u kullanmanın yolunu giderdim. İşte bazı örnekler: http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial.

Arttırma işlemini henüz denemediyseniz, örneğin birçok işletim sistemi bağımlılığı gibi birçok sorunu ortadan kaldırdığından sizi çok fazla sorundan kurtarmanızı tavsiye ederim. boost'daki birçok şey yalnızca başlıktır (şablon kitaplıkları). Ancak tarih saat bir lib veya dll gerektirir.

13

nitpicking: STL

C++ Standart kütüphane kendisi içerir ... vb jenerik konteyner ve algoritmalarla Standart Şablon Kütüphane fırsatları olma ve hatta gelecekte tarih taşıma ve hesaplama sınıfları dahil etmek mümkün değildir STL ve C standart kütüphanesinin bir önceki sürümü. İkincisi, yukarıda daha önce bahsedilen #include <ctime> aracılığıyla bazı tarih ve saat ile ilgili işlevler sunmaktadır.

Bu işlevleri sarmak (veya basitçe kullanmak) boost ürününü çekmek için yeterlidir (ve daha hızlı), bunlarla birlikte gidin. Onlarla yanlış bir şey yok.

4

Tamam. İşte en yakın olan Ben yaklaşık doğrudan akışa zaman yazma bulduk:

time_t t(time(NULL)); // current time 
tm tm(*localtime(&t)); 

std::locale loc(""); // current user locale 
ostringstream sout; 
const std::time_put<TCHAR> &tput = 
    std::use_facet<std::time_put<TCHAR> >(loc); 
tput.put(sout.rdbuf(), sout, _T('\0'), &tm, _T('x')); 
sout << ends; 

CString sTest(sout.str().c_str()); 

Çok yararlı bir kılavuzdur Apache C++ Standart kütüphane Başvuru Kılavuzu'na http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13

6

(<iomanip> başlığında get_time ve put_time vardır Bunların C++ 11 ile geldiğini tahmin ediyorum. Bu da string formatlama veya ayrıştırma işlerini etkili bir şekilde yapıyor.

İlgili konular