xtd 0.2.0
time_zone_info.h
Go to the documentation of this file.
1 #pragma once
6 #include "day_of_week.h"
7 #include "icomparable.h"
8 #include "iequatable.h"
9 #include "date_time.h"
10 #include "object.h"
11 #include "ticks.h"
12 #include "ustring.h"
13 
15 namespace xtd {
38  class core_export_ time_zone_info : public xtd::icomparable<time_zone_info>, public xtd::iequatable<time_zone_info>, public xtd::object {
39  public:
41 
66  class transition_time : public xtd::iequatable<transition_time>, public xtd::object {
67  public:
69  transition_time() = default;
70  transition_time(const transition_time&) = default;
71  transition_time(transition_time&&) = default;
72  transition_time& operator =(const transition_time&) = default;
74 
76 
83  uint32 day() const noexcept;
84 
89  xtd::day_of_week day_of_week() const noexcept;
90 
102  bool is_fixed_rule() const noexcept;
103 
108  uint32 month() const noexcept;
109 
115  xtd::date_time time_of_day() const noexcept;
116 
129  uint32 week() const noexcept;
131 
133 
144  static transition_time create_fixed_date_rule(date_time time_of_day, uint32 month, uint32 day);
145 
156  static transition_time create_floating_date_rule(date_time time_of_day, uint32 month, uint32 week, xtd::day_of_week day_of_week);
157 
158  bool equals(const transition_time& tt) const noexcept override;
160 
161  private:
162  uint32 day_ = 0;
163  xtd::day_of_week day_of_week_ = xtd::day_of_week::sunday;
164  bool is_fixed_date_rule_ = true;
165  uint32 month_ = 0;
166  xtd::date_time time_of_day_;
167  uint32 week_ = 0;
168  };
169 
186  class adjustement_rule : public xtd::iequatable<adjustement_rule>, public xtd::object {
187  public:
189  adjustement_rule() = default;
190  adjustement_rule(const adjustement_rule&) = default;
191  adjustement_rule(adjustement_rule&&) = default;
192  adjustement_rule& operator =(const adjustement_rule&) = default;
194 
196 
203  const xtd::date_time& date_end() const noexcept;
204 
210  const xtd::date_time& date_start() const noexcept;
211 
221  xtd::time_span daylight_delta() const noexcept;
222 
226  transition_time daylight_transition_end() const noexcept;
227 
231  transition_time daylight_transition_start() const noexcept;
233 
235 
237  bool equals(const adjustement_rule& ar) const noexcept override;
239 
240  private:
241  xtd::date_time date_end_ {date_time::max_value};
242  xtd::date_time date_start_ {date_time::min_value};
243  xtd::ticks daylight_delta_ {0};
244  transition_time daylight_transition_end_;
245  transition_time daylight_transition_start_;
246  };
248 
250  time_zone_info() = default;
251  time_zone_info(const ustring& id, const ticks& base_utc_offset, const ustring& daylight_name, const ustring& display_name, const ustring& standard_name, bool supports_daylight_saving_time);
252  time_zone_info(const time_zone_info&) = default;
253  time_zone_info(time_zone_info&&) = default;
254  time_zone_info& operator =(const time_zone_info&) = default;
256 
258 
268  ticks base_utc_offset() const noexcept;
269 
276  const ustring& daylight_name() const noexcept;
277 
288  const ustring& display_name() const noexcept;
289 
293  const ustring& id() const noexcept;
294 
297  static const time_zone_info& local() noexcept;
298 
304  const ustring& standard_name() const noexcept;
305 
309  bool supports_daylight_saving_time() const noexcept;
310 
313  static const time_zone_info& utc() noexcept;
315 
317 
324  static xtd::date_time convert_time_to_utc(const xtd::date_time& date_time);
325 
328  static const std::list<time_zone_info>& get_system_time_zones() noexcept;
329 
330  int32 compare_to(const time_zone_info& tzi) const noexcept override;
331 
337  static xtd::date_time convert_time(const xtd::date_time& date_time, const xtd::time_zone_info& destination_time_zone);
344  static xtd::date_time convert_time(const xtd::date_time& date_time, const xtd::time_zone_info& source_time_zone, const xtd::time_zone_info& destination_time_zone);
345 
350  static xtd::date_time convert_time_by_system_time_zone_id(const xtd::date_time& date_time, const xtd::ustring& destination_time_zone_id);
356  static xtd::date_time convert_time_by_system_time_zone_id(const xtd::date_time& date_time, const xtd::ustring& source_time_zone_id, const xtd::ustring& destination_time_zone_id);
357 
362  static xtd::date_time convert_from_utc(const xtd::date_time& date_time, const xtd::time_zone_info& destination_time_zone);
363 
368  static xtd::date_time convert_to_utc(const xtd::date_time& date_time, const xtd::time_zone_info& source_time_zone);
372  static xtd::date_time convert_to_utc(const xtd::date_time& date_time);
373 
374  bool equals(const time_zone_info& tzi) const noexcept override;
375 
378  std::vector<adjustement_rule> get_adjustement_rules() const noexcept;
379 
383  bool is_daylight_saving_time(const xtd::date_time& date_time) const noexcept;
384 
390  static time_zone_info time_find_system_time_zone_by_id(const ustring& id);
391 
392  xtd::ustring to_string() const noexcept override;
394 
395  private:
396  ustring id_;
397  ticks base_utc_offset_;
398  ustring daylight_name_;
399  ustring display_name_;
400  ustring standard_name_;
401  bool supports_daylight_saving_time_ = false;
402  std::vector<adjustement_rule> adjustement_rules_;
403  };
404 }
Indicates sunday.
Contains xtd::argument_out_of_range_exception exception.
Contains xtd::iequatable interface.
Contains xtd::icomparable interface.
std::chrono::duration< int64, tick > ticks
Represents a tick duration.
Definition: ticks.h:21
Defines a generalized comparison method that a value type or class implements to create a type-specif...
Definition: icomparable.h:17
Contains xtd::ticks typedef.
The xtd namespace contains all fundamental classes to access Hardware, Os, System, and more.
Definition: system_report.h:17
The time represented is UTC.
std::string to_string(const date_time &value, const std::string &fmt, const std::locale &loc)
Convert a specified value into a string with specified format and locale.
Definition: date_time.h:1063
day_of_week
Specifies the day of the week.
Definition: day_of_week.h:23
Contains xtd::date_time class.
The time represented is local time.
Defines a generalized method that a value type or class implements to create a type-specific method f...
Definition: iequatable.h:18
Represents an instant in time, typically expressed as a date and time of day.
Definition: date_time.h:78
static const date_time min_value
Represents the smallest possible value of xtd::date_time. This field is read-only.
Definition: date_time.h:100
day
Specifies the day of the week.
Definition: day.h:19
Contains xtd::ustring class.
Contains xtd::day_of_week enum class.
Contains xtd::object class.
Supports all classes in the xtd class hierarchy and provides low-level services to derived classes...
Definition: object.h:32
int_least32_t int32
Represents a 32-bit signed integer.
Definition: types.h:129
uint_least32_t uint32
Represents a 32-bit unsigned integer.
Definition: types.h:239
static const date_time max_value
Represents the largest possible value of xtd::date_time. This field is read-only. ...
Definition: date_time.h:90