DotNetDupe 4.0.6
C++17/20 Implementation of the .NET Base Class Library (BCL)
Loading...
Searching...
No Matches
TimeZoneInfo.cpp
Go to the documentation of this file.
1#include "pch.h"
3#include "System/Char.h"
4
5#if defined(_WIN32)
6#include <windows.h>
7#include "Win32Internal.h"
8using namespace DotNetDupe::System::Internal;
9#endif
10
11namespace DotNetDupe {
12 namespace System {
13 TimeZoneInfo::TimeZoneInfo(String id, TimeSpan baseUtcOffset, String displayName, String standardName, String daylightName, bool supportsDaylightSavingTime)
14 : _id(id), _baseUtcOffset(baseUtcOffset), _displayName(displayName), _standardName(standardName), _daylightName(daylightName), _supportsDaylightSavingTime(supportsDaylightSavingTime) {
15 }
16
17 String TimeZoneInfo::GetId() const { return _id; }
18 String TimeZoneInfo::GetDisplayName() const { return _displayName; }
19 String TimeZoneInfo::GetStandardName() const { return _standardName; }
20 String TimeZoneInfo::GetDaylightName() const { return _daylightName; }
21 TimeSpan TimeZoneInfo::GetBaseUtcOffset() const { return _baseUtcOffset; }
22 bool TimeZoneInfo::SupportsDaylightSavingTime() const { return _supportsDaylightSavingTime; }
23
24 TimeZoneInfo TimeZoneInfo::Local() {
25#if defined(_WIN32)
27 DYNAMIC_TIME_ZONE_INFORMATION dtzi;
28 DWORD result = GetDynamicTimeZoneInformation(&dtzi);
29
31 String id = String(WCharToUtf8(dtzi.TimeZoneKeyName).c_str());
32 TimeSpan baseUtcOffset(dtzi.Bias * -600000000LL);
33 String displayName = String(WCharToUtf8(dtzi.StandardName).c_str());
34 String standardName = String(WCharToUtf8(dtzi.StandardName).c_str());
35 String daylightName = String(WCharToUtf8(dtzi.DaylightName).c_str());
36 bool supportsDaylightSavingTime = (result != TIME_ZONE_ID_UNKNOWN);
37
39 return TimeZoneInfo(id, baseUtcOffset, displayName, standardName, daylightName, supportsDaylightSavingTime);
40#else
42 return Utc();
43#endif
44 }
45
46 TimeZoneInfo TimeZoneInfo::Utc() {
48 return TimeZoneInfo(String("UTC"), TimeSpan(0), String("(UTC) Coordinated Universal Time"), String("Coordinated Universal Time"), String("Coordinated Universal Time"), false);
49 }
50
51 TimeSpan TimeZoneInfo::GetUtcOffset(const DateTimeOffset& dateTimeOffset) const {
53 if (_id == "UTC") return TimeSpan(0);
54 return _baseUtcOffset;
55 }
56
57 bool TimeZoneInfo::IsDaylightSavingTime(const DateTimeOffset& dateTimeOffset) const {
59 if (!_supportsDaylightSavingTime) return false;
60 return false;
61 }
62
63 DateTimeOffset TimeZoneInfo::ConvertTime(const DateTimeOffset& dateTimeOffset, const TimeZoneInfo& destinationTimeZone) {
65 return dateTimeOffset;
66 }
67
68 DateTimeOffset TimeZoneInfo::ConvertTime(const DateTimeOffset& dateTimeOffset, const TimeZoneInfo& sourceTimeZone, const TimeZoneInfo& destinationTimeZone) {
70 return dateTimeOffset;
71 }
72
75 if (id == "UTC") return Utc();
76 return Utc();
77 }
78
79 bool TimeZoneInfo::Equals(const TimeZoneInfo& other) const {
81 return _id == other._id;
82 }
83 }
84}
Represents a Unicode character code point mirroring .NET System.Char.
Represents any time zone in the world.
Represents a point in time, typically expressed as a date and time of day, relative to Coordinated Un...
Represents text as a sequence of UTF-8 code units with culture-invariant operations.
Definition String.h:74
Represents a time interval (duration of time or elapsed time) measured as a positive or negative numb...
Definition TimeSpan.h:20
bool IsDaylightSavingTime(const DateTimeOffset &dateTimeOffset) const
Indicates whether a specified date and time falls in the range of daylight saving time for the time z...
bool SupportsDaylightSavingTime() const
Gets a value that indicates whether the time zone has any daylight saving time rules.
TimeSpan GetBaseUtcOffset() const
Gets the time difference between the current time zone's standard time and Coordinated Universal Time...
bool Equals(const TimeZoneInfo &other) const
Determines whether the current TimeZoneInfo object and another TimeZoneInfo object are equal.
static TimeZoneInfo Utc()
Gets a TimeZoneInfo object that represents the Coordinated Universal Time (UTC) zone.
static TimeZoneInfo Local()
Gets a TimeZoneInfo object that represents the local time zone.
String GetDaylightName() const
Gets the display name for the time zone's daylight saving time.
String GetStandardName() const
Gets the display name for the time zone's standard time.
static DateTimeOffset ConvertTime(const DateTimeOffset &dateTimeOffset, const TimeZoneInfo &destinationTimeZone)
Converts a time to the time in another time zone.
String GetDisplayName() const
Gets the general display name that represents the time zone.
String GetId() const
Gets the time zone identifier.
TimeSpan GetUtcOffset(const DateTimeOffset &dateTimeOffset) const
Calculates the offset or difference between the time in this time zone and UTC for a particular point...
static TimeZoneInfo FindSystemTimeZoneById(const String &id)
Retrieves a TimeZoneInfo object from the registry or system database based on its identifier.
std::string WCharToUtf8(const wchar_t *pWStr)