Howard Hinnant's date library'u kullanarak bunu nasıl yapacağınız.
#include "tz.h"
#include <iostream>
int
main()
{
using namespace std::chrono_literals;
using namespace date;
auto unix_timestamp = sys_seconds{1479664467s};
auto zt = make_zoned("America/Los_Angeles", unix_timestamp);
auto wd = weekday{floor<days>(zt.get_local_time())};
std::cout << wd << '\n';
}
ilk satırı sadece (diğer kaynaklardan olabilir) unix zaman damgası oluşturur: Bu <chrono>
dayalı bir serbest MİT lisanslı C++ 14/11 kütüphanesidir. 11 C++ biz Chrono-değişmezleri yoktur ve bu nedenle bu hat yerine olacaktır:
auto unix_timestamp = sys_seconds{seconds{1479664467}};
make_zoned()
unix_timestamp
ve time_zone
"tane /" dayalı bir zoned_time<seconds>
oluşturur. Bir zoned_time
bir time_zone
ve unix zaman damgası topluluğudur.
Sen zt.get_local_time()
ile zoned_time
dışına yerel saati alabilirsiniz. Bu bir chrono::time_point
ancak onunla ilişkili saat yok. Bu zaman noktasının kesinliği, orijinal zaman damgasının kesinliğine eşit olacaktır (bu durumda saniye).
Sen days
bir hassasiyetle local_time
kesiliyor tarafından local_time
haftanın yerel gününü alabilirsiniz:
floor<days>(zt.get_local_time())
Ve bu gün kesinlik time_point
weekday
yazmanız dönüştürecektir.
bir weekday
weekday
aritmetik ve karşılaştırmalar katılabilir, basılabilir veya açıkça aralığındaki bir
unsigned
dönüştürülebilir [0, 6].
programı yukarıdaki çıkışlar:
Sun
Bu kütüphanenin zaman dilimi kısmı IANA timezone database sadık bir temsilidir. Yerel saat dilimleri ile UTC arasında, günümüzün 1800'lü yılların sonuna kadar doğru ayarlamalar yapacaktır. Kütüphane zaman damgalarını 1800'lerin ortalarından önce geçirirseniz, bilinen en eski UTC ofseti geriye doğru -32768 yılına kadar tahmin edilmiştir. Ayrıca yılın 32767 ve akım ofset ve gün ışığından yararlanma kuralları ileriye aktarılacaktır gelecekte kadarıyla damgalarını geçebilir.
Bu kütüphane <chrono>
üzerine kurulduğundan, <chrono>
ürününün sağladığı her türlü hassaslığı ele alacaktır. nanoseconds
gibi bazı chrono::duration
s'nin daha sınırlı bir aralığa sahip olduğunu unutmayın (nanoseconds
için +/- 292 yıl).
Kitaplık/süreç iş parçacığı güvenlidir. Yani, program, bilgisayarınızın saat dilimini veya başlık altındaki ortam değişkenlerini değiştirmeden belirttiğiniz saat dilimi ile doğrudan çalışır. Ayrıca, yerleşik olmayan işlev yerel statikleri nedeniyle iş parçacığı güvenli olmadığı bilinen C zamanlama API'sinin bir bölümünü içermez.
Gcc, clang ve VS'nin son sürümlerine taşındı.
standart UNIX C (non parçacığı güvenli versiyon) kullanılarak
Seni reddetmedim ama nasıl ['std :: localtime'] (http://en.cppreference.com/w/cpp/chrono/c/localtime)? – Danh
Teşekkür ederim - yerel saat benim için PT değilse ne olur? –
[strftime] (http://en.cppreference.com/w/cpp/chrono/c/strftime). Veya [time_put] (http://en.cppreference.com/w/cpp/locale/time_put). Veya [Howard Hinnant'ın tarihi] (https://github.com/HowardHinnant/date) - işaretçiler, cevapları değil, bu yüzden bir yorum. –