Stroika Library 3.0d23
 
Loading...
Searching...
No Matches
Timezone.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2026. All rights reserved
3 */
4
5namespace Stroika::Foundation::Time {
6
7 /*
8 ********************************************************************************
9 *********************************** Timezone ***********************************
10 ********************************************************************************
11 */
12 inline constexpr Timezone::Timezone (TZ_ tz) noexcept
13 : fTZ_{tz}
14 , fBiasInMinutesFromUTC_{0}
15 {
16 }
17 inline constexpr Timezone::Timezone (BiasInMinutesFromUTCType biasInMinutesFromUTC) noexcept
18 : fTZ_{TZ_::eFixedOffsetBias}
19 , fBiasInMinutesFromUTC_{biasInMinutesFromUTC}
20 {
21 Require (kBiasInMinutesFromUTCTypeValidRange.Contains (biasInMinutesFromUTC));
22 }
23 inline constexpr Timezone::Timezone (BiasInMinutesFromUTCType biasInMinutesFromUTC, DataExchange::ValidationStrategy validationStrategy)
24 : fTZ_{TZ_::eFixedOffsetBias}
25 , fBiasInMinutesFromUTC_{biasInMinutesFromUTC}
26 {
27 if (validationStrategy == DataExchange::ValidationStrategy::eThrow) {
28 if (not kBiasInMinutesFromUTCTypeValidRange.Contains (biasInMinutesFromUTC)) {
29 Execution::Throw (Execution::RuntimeErrorException{"invalid timezone offset"sv});
30 }
31 }
32 Require (kBiasInMinutesFromUTCTypeValidRange.Contains (biasInMinutesFromUTC));
33 }
34
35 /**
36 * Returns Timezone object in UTC timezone.
37 */
38 inline constexpr Timezone Timezone::kUTC{TZ_::eUTC};
39
40 /**
41 * Returns Timezone object in localtime timezone.
42 *
43 * \note - LocalTime is a STICKY property. This does NOT return the FIXED OFFSET for the current local-time, but rather a special
44 * Timezone which always references that global current timezone.
45 */
46 inline constexpr Timezone Timezone::kLocalTime{TZ_::eLocalTime};
47
48 inline constexpr optional<Timezone> Timezone::kUnknown{nullopt};
49
50 inline make_signed_t<time_t> Timezone::GetBiasFromUTC (const Date& date, const TimeOfDay& tod) const
51 {
52 // Cast to avoid warning, but no chance of overflow cuz GetBiasInMinutesFromUTC range restricted and time_t at least 4 bytes
53 return static_cast<make_signed_t<time_t>> (60) * GetBiasInMinutesFromUTC (date, tod);
54 }
55
56}