Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Timezone.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. 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 inline constexpr Timezone Timezone::kUTC{TZ_::eUTC};
35 inline constexpr Timezone Timezone::kLocalTime{TZ_::eLocalTime};
36 inline constexpr optional<Timezone> Timezone::kUnknown{nullopt};
37 inline make_signed_t<time_t> Timezone::GetBiasFromUTC (const Date& date, const TimeOfDay& tod) const
38 {
39 // Cast to avoid warning, but no chance of overflow cuz GetBiasInMinutesFromUTC range restricted and time_t at least 4 bytes
40 return static_cast<make_signed_t<time_t>> (60) * GetBiasInMinutesFromUTC (date, tod);
41 }
42
43}