mirror of
				https://git.h3cjp.net/H3cJP/citra.git
				synced 2025-10-31 06:55:03 +00:00 
			
		
		
		
	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_queue_list.h | ||||
|     threadsafe_queue.h | ||||
|     time_zone.cpp | ||||
|     time_zone.h | ||||
|     timer.cpp | ||||
|     timer.h | ||||
|     uint128.cpp | ||||
|  |  | |||
							
								
								
									
										49
									
								
								src/common/time_zone.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/common/time_zone.cpp
									
									
									
									
									
										Normal file
									
								
							|  | @ -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
 | ||||
							
								
								
									
										17
									
								
								src/common/time_zone.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								src/common/time_zone.h
									
									
									
									
									
										Normal file
									
								
							|  | @ -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
 | ||||
		Loading…
	
		Reference in a new issue