2010-11-09 14 views

cevap

4

Evet, ama sadece standart c kütüphanesi mekanizmalarını kullanırlar.

bir dize oluşturarak ortamda istenilen zaman dilimini ayarlayın:

std::string tz = "TZ=Australia/Sydney"; 
putenv(const_cast<char *>(tz.c_str())); 
tzset(); // Initialize timezone data 
time_t aTime = time(NULL); // get the time - this is GMT based. 
struct tm retTime; 
localtime_r(aTime, &retTime); // Convert time into current timezone. 
char destString[1024]; 
strftime(destString, 1023, "%Y%m%d %Z", &retTime); // Format the output in the local time. 
std::cout << destString << std::endl; 

sorun bu kod parçacığı güvenli olmamasıdır - iyi bitmiyor saat dilimi bilgilerini değiştirme birden konuları.

This Answer Bunu çok daha kolay olan destek kullanarak gerçekleştirmenin bir yolunu sunuyor. Boost.DateTime kullanarak

1

zaman dilimleri hakkında daha fazla bilgi için

  • http://www.boost.org/doc/libs/1_44_0/doc/html/date_time/local_time.html:

    // Load the timezone database 
    tz_database db; 
    // TODO: Adjust this path to your environment 
    db.load_from_file("./boost/libs/date_time/data/date_time_zonespec.csv"); 
    
    // Get the Sydney timezone 
    time_zone_ptr sydney_zone = db.time_zone_from_region("Australia/Sydney"); 
    
    // Current date/time in Sydney 
    local_date_time sydney_time = local_sec_clock::local_time(sydney_zone); 
    
    // Format sydney_time in desired format 
    std::ostringstream formatter; 
    formatter.imbue(std::locale(), new local_time_facet("%Y%m%d")); 
    formatter << sydney_time; 
    

    See (Uyarı yalnızca açıklama amaçlı, test edilmiştir). Biçimlendirme hakkında daha fazla bilgi için

  • http://www.boost.org/doc/libs/1_44_0/doc/html/date_time/date_time_io.html. Eski soru için
1

Yeni cevap:

bu cross platform, open source C++11/C++14 timezone library biri yazabilir kullanma:

#include "tz.h" 
#include <iostream> 

int 
main() 
{ 
    using namespace std::chrono; 
    using namespace std; 
    using namespace date; 
    auto ymd = make_zoned("Australia/Sydney", system_clock::now()); 
    cout << format("%Y%m%d", ymd) << '\n'; 
} 

hangisi benim için sadece çıkış:

İplik güvenlidir
20150824 

. Yeni indirdiğiniz IANA timezone database kopyası kadar güncel. Ve eğer tarihiniz "şimdi" olmayacaksa, IANA veri tabanından geçmiş verileri doğru bir şekilde kullanacaktır.

İlgili konular