summaryrefslogtreecommitdiffstats
path: root/src/common/time_zone.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-05-14 03:41:45 +0200
committerGitHub <noreply@github.com>2020-05-14 03:41:45 +0200
commit670a7f51e8f3134fb246a471f0c9833904a6234e (patch)
treed20a6ccc6070f49aefd3069456545451a42e66cf /src/common/time_zone.cpp
parentMerge pull request #3899 from ReinUsesLisp/float-comparisons (diff)
parenttime_zone: Use std::chrono::seconds for strong typing. (diff)
downloadyuzu-670a7f51e8f3134fb246a471f0c9833904a6234e.tar
yuzu-670a7f51e8f3134fb246a471f0c9833904a6234e.tar.gz
yuzu-670a7f51e8f3134fb246a471f0c9833904a6234e.tar.bz2
yuzu-670a7f51e8f3134fb246a471f0c9833904a6234e.tar.lz
yuzu-670a7f51e8f3134fb246a471f0c9833904a6234e.tar.xz
yuzu-670a7f51e8f3134fb246a471f0c9833904a6234e.tar.zst
yuzu-670a7f51e8f3134fb246a471f0c9833904a6234e.zip
Diffstat (limited to 'src/common/time_zone.cpp')
-rw-r--r--src/common/time_zone.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/common/time_zone.cpp b/src/common/time_zone.cpp
new file mode 100644
index 000000000..ce239eb63
--- /dev/null
+++ b/src/common/time_zone.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;
+ }
+}
+
+std::chrono::seconds 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 std::chrono::seconds{seconds};
+}
+
+} // namespace Common::TimeZone