common: Add module to get the current time zone.
This commit is contained in:
parent
988e42a3f5
commit
33441fa728
|
@ -148,6 +148,8 @@ add_library(common STATIC
|
||||||
thread.h
|
thread.h
|
||||||
thread_queue_list.h
|
thread_queue_list.h
|
||||||
threadsafe_queue.h
|
threadsafe_queue.h
|
||||||
|
time_zone.cpp
|
||||||
|
time_zone.h
|
||||||
timer.cpp
|
timer.cpp
|
||||||
timer.h
|
timer.h
|
||||||
uint128.cpp
|
uint128.cpp
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
// Copyright 2020 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#include "common/logging/log.h"
|
||||||
|
#include "common/time_zone.h"
|
||||||
|
|
||||||
|
namespace Common::TimeZone {
|
||||||
|
|
||||||
|
std::string GetDefaultTimeZone() {
|
||||||
|
return "GMT";
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::string GetOsTimeZoneOffset() {
|
||||||
|
const std::time_t t{std::time(nullptr)};
|
||||||
|
const std::tm tm{*std::localtime(&t)};
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << std::put_time(&tm, "%z"); // Get the current timezone offset, e.g. "-400", as a string
|
||||||
|
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ConvertOsTimeZoneOffsetToInt(const std::string& timezone) {
|
||||||
|
try {
|
||||||
|
return std::stoi(timezone);
|
||||||
|
} catch (const std::invalid_argument&) {
|
||||||
|
LOG_CRITICAL(Common, "invalid_argument with {}!", timezone);
|
||||||
|
return 0;
|
||||||
|
} catch (const std::out_of_range&) {
|
||||||
|
LOG_CRITICAL(Common, "out_of_range with {}!", timezone);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetCurrentOffsetSeconds() {
|
||||||
|
const int offset{ConvertOsTimeZoneOffsetToInt(GetOsTimeZoneOffset())};
|
||||||
|
|
||||||
|
int seconds{(offset / 100) * 60 * 60}; // Convert hour component to seconds
|
||||||
|
seconds += (offset % 100) * 60; // Convert minute component to seconds
|
||||||
|
|
||||||
|
return seconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Common::TimeZone
|
|
@ -0,0 +1,17 @@
|
||||||
|
// Copyright 2020 yuzu Emulator Project
|
||||||
|
// Licensed under GPLv2 or any later version
|
||||||
|
// Refer to the license.txt file included.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace Common::TimeZone {
|
||||||
|
|
||||||
|
/// Gets the default timezone, i.e. "GMT"
|
||||||
|
std::string GetDefaultTimeZone();
|
||||||
|
|
||||||
|
/// Gets the offset of the current timezone (from the default), in seconds
|
||||||
|
int GetCurrentOffsetSeconds();
|
||||||
|
|
||||||
|
} // namespace Common::TimeZone
|
Reference in New Issue