Replace gmtime/localtime with std::chrono (#8735)

Fixes #8734.
This commit is contained in:
Peter Johnson
2026-04-09 22:25:46 -07:00
committed by GitHub
parent ece8001b1e
commit a4e035ba64
4 changed files with 24 additions and 24 deletions

View File

@@ -2,7 +2,7 @@
// Open Source Software; you can modify and/or share it under the terms of
// the WPILib BSD license file in the root directory of this project.
#include <ctime>
#include <chrono>
#include <utility>
#include <vector>
@@ -93,9 +93,10 @@ int main(int argc, const char** argv) {
if (entry->second.name == "systemTime" && entry->second.type == "int64") {
int64_t val;
if (record.GetInteger(&val)) {
std::time_t timeval = val / 1000000;
wpi::util::print(" {:%Y-%m-%d %H:%M:%S}.{:06}\n",
*std::localtime(&timeval), val % 1000000);
auto timeval = std::chrono::system_clock::time_point(
std::chrono::microseconds(val));
wpi::util::print(" {:%Y-%m-%d %H:%M:%S}.{:06}\n", timeval,
val % 1000000);
} else {
wpi::util::print(" invalid\n");
}

View File

@@ -5,7 +5,7 @@
#include "DataLogManager.h"
#include <algorithm>
#include <ctime>
#include <chrono>
#include <random>
#include <string>
#include <string_view>
@@ -376,9 +376,8 @@ void Thread::Main() {
}
if (dsAttachCount > 50) { // 1 second
if (RobotController::IsSystemTimeValid()) {
std::time_t now = std::time(nullptr);
auto tm = std::gmtime(&now);
m_log.SetFilename(fmt::format("WPILIB_{:%Y%m%d_%H%M%S}.wpilog", *tm));
auto now = std::chrono::system_clock::now();
m_log.SetFilename(fmt::format("WPILIB_{:%Y%m%d_%H%M%S}.wpilog", now));
dsRenamed = true;
} else {
dsAttachCount = 0; // wait a bit and try again
@@ -415,11 +414,11 @@ void Thread::Main() {
matchTypeChar = '_';
break;
}
std::time_t now = std::time(nullptr);
auto now = std::chrono::system_clock::now();
m_log.SetFilename(
fmt::format("WPILIB_{:%Y%m%d_%H%M%S}_{}_{}{}.wpilog",
*std::gmtime(&now), DriverStation::GetEventName(),
matchTypeChar, DriverStation::GetMatchNumber()));
fmt::format("WPILIB_{:%Y%m%d_%H%M%S}_{}_{}{}.wpilog", now,
DriverStation::GetEventName(), matchTypeChar,
DriverStation::GetMatchNumber()));
fmsRenamed = true;
dsRenamed = true; // don't override FMS rename
}

View File

@@ -5,7 +5,7 @@
#include "Exporter.hpp"
#include <atomic>
#include <ctime>
#include <chrono>
#include <functional>
#include <future>
#include <map>
@@ -462,9 +462,10 @@ static void ValueToCsv(wpi::util::raw_ostream& os, const Entry& entry,
if (entry.name == "systemTime" && entry.type == "int64") {
int64_t val;
if (record.GetInteger(&val)) {
std::time_t timeval = val / 1000000;
wpi::util::print(os, "{:%Y-%m-%d %H:%M:%S}.{:06}",
*std::localtime(&timeval), val % 1000000);
auto timeval =
std::chrono::system_clock::time_point(std::chrono::microseconds(val));
wpi::util::print(os, "{:%Y-%m-%d %H:%M:%S}.{:06}", timeval,
val % 1000000);
return;
}
} else if (entry.type == "double") {

View File

@@ -5,7 +5,7 @@
#include "wpi/system/DataLogManager.hpp"
#include <algorithm>
#include <ctime>
#include <chrono>
#include <random>
#include <string>
#include <vector>
@@ -225,9 +225,8 @@ void Thread::Main() {
}
if (dsAttachCount > 50) { // 1 second
if (RobotController::IsSystemTimeValid()) {
std::time_t now = std::time(nullptr);
auto tm = std::gmtime(&now);
m_log.SetFilename(fmt::format("WPILIB_{:%Y%m%d_%H%M%S}.wpilog", *tm));
auto now = std::chrono::system_clock::now();
m_log.SetFilename(fmt::format("WPILIB_{:%Y%m%d_%H%M%S}.wpilog", now));
dsRenamed = true;
} else {
dsAttachCount = 0; // wait a bit and try again
@@ -263,11 +262,11 @@ void Thread::Main() {
matchTypeChar = '_';
break;
}
std::time_t now = std::time(nullptr);
auto now = std::chrono::system_clock::now();
m_log.SetFilename(
fmt::format("WPILIB_{:%Y%m%d_%H%M%S}_{}_{}{}.wpilog",
*std::gmtime(&now), DriverStation::GetEventName(),
matchTypeChar, DriverStation::GetMatchNumber()));
fmt::format("WPILIB_{:%Y%m%d_%H%M%S}_{}_{}{}.wpilog", now,
DriverStation::GetEventName(), matchTypeChar,
DriverStation::GetMatchNumber()));
fmsRenamed = true;
dsRenamed = true; // don't override FMS rename
}