Eski bir soru için yeni cevap:
Soru, hangi saat diliminde belirtilmez. İki makul olasılık vardır:
- UTC'de.
- Bilgisayarın yerel saat diliminde.
1 için, bu tarih kütüphanesini ve aşağıdaki programı kullanabilirsiniz:
#include "date.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
std::cout << system_clock::now() << '\n';
}
Hangi benim için çıktı:
2015-08-18 22:08:18.944211
Tarih kütüphanesi sadece için bir akış operatörü ekler std::chrono::system_clock::time_point. Ayrıca başka birçok güzel işlevsellik ekler, ancak bu basit programda kullanılmaz.
2'yi (yerel saat) tercih ederseniz , tarih kütüphanesinin üzerine inşa edilmiş bir saat dilimi kütüphanesi vardır . Bu kütüphanelerin her ikisi de derleyicinin C ++ 11 veya C ++ 14'ü desteklediği varsayılarak açık kaynak ve çapraz platformdur .
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono;
auto local = make_zoned(current_zone(), system_clock::now());
std::cout << local << '\n';
}
Hangi benim için sadece çıktı:
2015-08-18 18:08:18.944211 EDT
Elde edilen sonuç türü make_zoneda, date::zoned_timea bir eşleştirme olan date::time_zoneve std::chrono::system_clock::time_point. Bu çift yerel bir zamanı temsil eder, ancak nasıl sorguladığınıza bağlı olarak UTC'yi de temsil edebilir.
Yukarıdaki çıktı ile, bilgisayarımın şu anda UTC -4h ve EDT kısaltması ile bir saat diliminde olduğunu görebilirsiniz.
Başka bir saat dilimi isteniyorsa, bu da gerçekleştirilebilir. Örneğin, Sydney, Avustralya'da geçerli saati bulmak için değişkenin yapısını şu şekilde değiştirin local:
auto local = make_zoned("Australia/Sydney", system_clock::now());
Ve çıktı şu şekilde değişir:
2015-08-19 08:08:18.944211 AEST
C ++ 20 Güncelleştirmesi
Bu kütüphane artık büyük ölçüde C ++ 20 için benimsenmiştir. Ad alanı datekayboldu ve std::chronoşimdi her şey ad alanında . Ve kullanmak zoned_timeyerine make_time. Başlıklarını Bırak "date.h"ve "tz.h"sadece kullanmak <chrono>.
Bunu yazarken, bazı platformlarda kısmi uygulamalar ortaya çıkmaya başlıyor.