İçine yıl/ay/gün dönüştürmek için days_from_civil kullanmak, sonra elle (int içine okuyarak ve çift saniye) Bu alanları ayrıştırmak verecek bir chrono::system_clock::time_point
:
std::chrono::system_clock::time_point t(days(days_from_civil(y, m, d)));
days
olduğu:
using days = std::chrono::duration<int, std::ratio<86400>>;
Bunu daha sonra saat, dakika ve saniye olarak ekleyebilirsiniz. fraksiyonel saniye işlemek için, hafif bir dans yapmak gerekir:
İsterseniz
double s;
your_stream >> s; // 32.121
using namespace std::chrono;
duration<double> dsecs(s);
seconds sec = duration_cast<seconds>(dsecs);
milliseconds ms = duration_cast<milliseconds>(dsecs - sec);
t += sec + ms;
, senin milisaniye dönüşüm için round
from here kullanın:
milliseconds ms = round<milliseconds>(dsecs - sec);
duration_cast
sıfıra doğru kesmek olduğunu. Diğer yuvarlama modları vardır: zemin, yuvarlak, tavan, at this link.
Kolay yeniden kullanım için tümünü temiz bir işleve sarın. :-)
Yukarıdaki kod, UTC'yi varsayar. Ayrıştırma yaptığınız tarihin/saatin UTC'den kaydığı biliniyorsa, bu ofseti ekleyebilir/çıkartabilirsiniz. Bilinen tüm uygulamalar, Unix time parçasını izler; bu, UTC saat diliminde 1970-01-01'den beri olan süredir.
Ben OP o zaman arayan gibiydi bir more general library geliştirdik bu cevabı yazarken yana Güncelleme
.
#include "date.h"
#include <iostream>
#include <sstream>
int
main()
{
std::istringstream in{"30/03/09 16:31:32.121\n"
"30/03/09 16:31:32.1214"};
std::chrono::system_clock::time_point tp;
in >> date::parse("%d/%m/%y %T", tp);
using namespace date;
std::cout << tp << '\n';
in >> date::parse(" %d/%m/%y %T", tp);
std::cout << tp << '\n';
}
Bu çıkışlar: doğrudan böyle bir std::chrono::system_clock::time_point
içine alt ikinci hassasiyetleri çeşitli ayrıştırabilir
2009-03-30 16:31:32.121000
2009-03-30 16:31:32.121400
Bu kütüphane başlangıçta tarif edildiği gibi aynı teknik ve araçlarını kullanmaktadır, ama paketlenir tek bir başlık kütüphanesi olarak gitmeye hazır.
['std :: get_time'] (http://en.cppreference.com/w/cpp/io/manip/get_time), C++ 11'dir, ancak strptime'ın belirtimlerini yansıtır. Milisaniye kaydetmeniz mi gerekiyor yoksa sadece onu görüntülemeniz mi gerekiyor? –
Amacım bu tarih saatini bir chrono zaman noktasında saklamak, böylece ayrıştırmak ve saklamak için ihtiyacım var. – Nezquick
.1214 ile milisaniye sormuyorsunuz, ancak 1/10 milisaniye veya 100 mikrosaniye. –