discord-timestamp/src/distime.cpp

58 lines
1.9 KiB
C++
Raw Normal View History

#include "../include/distime.h"
#include <algorithm>
#include <iomanip>
#include <iostream>
namespace distime {
void parseTimeInput(std::tm &resultTime, const std::tm &currentTime) {
std::string timeInput{};
bool continueLoop{true};
while (continueLoop) {
// Unique formatting of 'cout' should make the output easier to predict
std::cout
//blank
<< "\nCurrent time: " << std::put_time(&currentTime, "%d-%m-%Y %H:%M\n")
//blank
<< "Day (dd) Month (mm) Year(yyyy) 24 Hour (HH) Minute (MM)\n"
<< ">: ";
std::getline(std::cin, timeInput);
2025-06-27 08:20:24 +00:00
if (std::ranges::any_of(timeInput.cbegin(), timeInput.cend(), [] (char input) {return !isdigit(input) && !isspace(input);})) {
std::cout << "Cannot contain non-numbers";
continue;
}
int spaceCheck = static_cast<int>(std::ranges::count(timeInput.cbegin(), timeInput.cend(), ' '));
if (spaceCheck != 4) {
if (spaceCheck < 4)
std::cout << "Too few spaces\n";
else if (spaceCheck > 4)
std::cout << "Too many spaces\n";
std::cout << "Example of a working input: '25 02 2015 06 00' \n";
std::cout << "Press enter to continue...";
std::cin.get();
continue;
}
continueLoop = false;
}
std::istringstream timeStream {timeInput};
int day, month, year, hour, minute;
timeStream >> day >> month >> year >> hour >> minute;
// Assign the values to resultTime
resultTime.tm_mday = day;
resultTime.tm_mon = month - 1;
resultTime.tm_year = year - 1900;
resultTime.tm_hour = hour;
resultTime.tm_min = minute;
resultTime.tm_sec = 0;
}
}