bu free, open-source library kullanarak:
#include "tz.h"
#include <iostream>
int
main()
{
using namespace date;
using namespace std::chrono_literals;
try
{
auto zone = locate_zone("America/New_York");
zone->to_sys(local_days{mar/13/2016} + 2h + 30min);
}
catch (const std::exception& e)
{
std::cout << e.what() << '\n';
}
}
Bu programın çıktısı: Kısacası
2016-03-13 02:30 is in a gap between
2016-03-13 02:00:00 EST and
2016-03-13 03:00:00 EDT which are both equivalent to
2016-03-13 07:00:00 UTC
bu program 2016- bir yerel tarih/saat çevirmek için çalışır 03-13 02:30:00 arası "America/New_York" saat dilimini kullanarak UTC'ye. Yerel zaman mevcut olmadığından çeviri bir istisna atar. Yerel saat, gün ışığından itibaren yerel saatin ayarlanması gibi belirsiz ise (farklı bir hata mesajıyla) bir istisna da atılır.
Kütüphane, bu istisna durumlarından kaçınmak için sözdizimi de sağlar.
Bu, VS-2013, VS-2015, clang ve gcc'de çalışır. C++ 11, C++ 14 veya C++ 1z gerektirir.
Yukarıdaki bağlantı belgelere işaret eder. İşte github deposudur:
https://github.com/HowardHinnant/date
Şaşırtıcı bir soru kesinlikle. Ayrıca, 30-Haziran-2015, 23.59.60 gibi ikinci günleri de desteklemeniz gerekiyor mu? (Öyleyse, Google'ın zaman API'sını kural dışı bırakıyorsa) I * düşünüyorum tarih-zaman kitaplıkları en iyi başlangıç noktası olacaktır.Bu kütüphaneleri kullanıyorum ama bu özel şey için değil. – Bathsheba
"Boost-date-time" ı ve belki de "boost" u etiketledim çünkü bir çözümün bu kutudan çıkmış olabileceğini ya da özellikle bu çerçevede uygulanması zor olamayacağını hayal ettim. – Bathsheba
Standart C++ kütüphanesi zamanla uğraşırken belirsizdir. Windows'ı hedeflerseniz, SystemTimeToFileTime() veya SystemTimeToTzSpecificLocalTime() yöntemini kullanabilirsiniz. Kötü bir tarih geçerken, işlev ERROR_INVALID_PARAMETER ile başarısız olur. Çapraz platform olması gerekiyorsa, bir kütüphane için alışverişe çıkmanız gerekir. –