J'ai construit une fonction qui prend en entrée une date spécifique et retourne cette date au format std::chrono::milliseconds
.Pouvons-nous prendre une variable `std :: chrono :: milliseconds` d'une plage du même type?
milliseconds lowerRangeBound = TimeStamp(mm, dd, HH, MM, SS, yyyy);
Par exemple,
milliseconds a = TimeStamp(8/*month*/, 23/*day*/, 14/*hours*/, 46/*minutes*/, 32/*seconds*/, 2017/*year*/);
retours dans un format de chaîne convertie: 2017.08.23-14.46.32
Ce que je veux maintenant faire et ne fonctionne pas est donné deux dates (milliseconds
) de prendre un échantillon aléatoire date à l'intérieur de la gamme définie par ces deux dates. Par exemple, étant donné
milliseconds a = TimeStamp(8/*month*/, 23/*day*/, 13/*hours*/, 46/*minutes*/, 32/*seconds*/, 2017/*year*/);
milliseconds b = TimeStamp(10/*month*/, 23/*day*/, 13/*hours*/, 46/*minutes*/, 32/*seconds*/, 2017/*year*/);
le résultat attendu est un milliseconds c
qui sous forme de chaîne est une date comme celui-ci, 2017.09.13-12.56.12
. Notez que la sortie désirée est un milliseconds
, le format de chaîne est fourni afin de parler en readable format.
Ce que j'ai essayé jusqu'à présent est de convertir chaque variable milliseconds
en nombre long
(.count()
) et obtenir un randomlong
dans la gamme [a,b]
. Cependant, la date de sortie n'est pas pertinente: 1977.12.06-16.27.02
.
Pourriez-vous donner un coup de main?
Merci à l'avance.
EDIT: Le soufflet de code est inspiré par cette link
milliseconds TimeStamp(int mm, int dd, int HH, int MM, int SS, int yyyy) {
tm ttm = tm();
ttm.tm_year = yyyy - 1900; // Year since 1900
ttm.tm_mon = mm - 1; // Month since January
ttm.tm_mday = dd; // Day of the month [1-31]
ttm.tm_hour = HH; // Hour of the day [00-23]
ttm.tm_min = MM;
ttm.tm_sec = SS;
time_t ttime_t = mktime(&ttm);
system_clock::time_point time_point_result = std::chrono::system_clock::from_time_t(ttime_t);
milliseconds now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(time_point_result).time_since_epoch();
return now_ms;
}
milliseconds getRandomTimestamp(int mm_1, int dd_1, int HH_1, int MM_1, int SS_1, int yyyy_1,
int mm_2, int dd_2, int HH_2, int MM_2, int SS_2, int yyyy_2, int N) {
milliseconds lowerRangeBound = fixedTimeStamp(mm_1, dd_1, HH_1, MM_1, SS_1, yyyy_1);
milliseconds upperRangeBound = fixedTimeStamp(mm_2, dd_2, HH_2, MM_2, SS_2, yyyy_2);
long lowerRange_ = lowerRangeBound.count();
long upperRange_ = upperRangeBound.count();
//long output = rand() % (upperRange_ - lowerRange_ + 1) + lowerRange_;
// rand() replaced after @Jarod42's suggestion.
std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(lowerRange_, upperRange_);
long output = distribution(generator);
std::chrono::duration<long> dur(output);
return dur;
}
* Qu'avez-vous essayé? S'il vous plaît nous montrer un [Exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve), au lieu de simplement le décrire. –
hors-sujet à votre question: 'myTimeStamp (8, 23, 13, 46, 32, 2017);' est un horrible, la tête-mal, erreur conception sujettes – bolov
J'espère que le poste est maintenant plus attrayant. Merci pour l'intérêt en passant! – Darkmoor