// Generated by gmmproc 2.66.3 -- DO NOT MODIFY!
#ifndef _GLIBMM_TIMEZONE_H
#define _GLIBMM_TIMEZONE_H
/* Copyright (C) 2011 The glibmm Development Team
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see .
*/
#include
#include
#include
#include
#include
#ifndef DOXYGEN_SHOULD_SKIP_THIS
typedef struct _GTimeZone GTimeZone;
#endif
//TODO: When we can change API, make TimeZone a _CLASS_BOXEDTYPE.
namespace Glib
{
/** @addtogroup glibmmEnums glibmm Enums and Flags */
/**
* @var TimeType TIME_TYPE_STANDARD
* The time is in local standard time.
*
* @var TimeType TIME_TYPE_DAYLIGHT
* The time is in local daylight time.
*
* @var TimeType TIME_TYPE_UNIVERSAL
* The time is in UTC.
*
* @enum TimeType
*
* Disambiguates a given time in two ways.
*
* First, specifies if the given time is in universal or local time.
*
* Second, if the time is in local time, specifies if it is local
* standard time or local daylight time. This is important for the case
* where the same local time occurs twice (during daylight savings time
* transitions, for example).
*
* @ingroup glibmmEnums
*/
enum TimeType
{
TIME_TYPE_STANDARD,
TIME_TYPE_DAYLIGHT,
TIME_TYPE_UNIVERSAL
};
/** TimeZone - A structure representing a time zone.
* TimeZone is a structure that represents a time zone, at no particular point
* in time. It is immutable.
*
* A time zone contains a number of intervals. Each interval has an
* abbreviation to describe it, an offet to UTC and a flag indicating if the
* daylight savings time is in effect during that interval. A time zone always
* has at least one interval -- interval 0.
*
* Every UTC time is contained within exactly one interval, but a given local
* time may be contained within zero, one or two intervals (due to
* incontinuities associated with daylight savings time).
*
* An interval may refer to a specific period of time (eg: the duration of
* daylight savings time during 2010) or it may refer to many periods of time
* that share the same properties (eg: all periods of daylight savings time).
* It is also possible (usually for political reasons) that some properties
* (like the abbreviation) change between intervals without other properties
* changing.
* @newin{2,30}
*/
class GLIBMM_API TimeZone
{
public:
#ifndef DOXYGEN_SHOULD_SKIP_THIS
using CppObjectType = TimeZone;
using BaseObjectType = GTimeZone;
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
/** Constructs an invalid object.
* E.g. for output arguments to methods. There is not much you can do with
* the object before it has been assigned a valid value.
*/
TimeZone();
// Use make_a_copy=true when getting it directly from a struct.
explicit TimeZone(GTimeZone* castitem, bool make_a_copy = false);
TimeZone(const TimeZone& src);
TimeZone& operator=(const TimeZone& src);
TimeZone(TimeZone&& other) noexcept;
TimeZone& operator=(TimeZone&& other) noexcept;
~TimeZone() noexcept;
void swap(TimeZone& other) noexcept;
GTimeZone* gobj() { return gobject_; }
const GTimeZone* gobj() const { return gobject_; }
///Provides access to the underlying C instance. The caller is responsible for freeing it. Use when directly setting fields in structs.
GTimeZone* gobj_copy() const;
protected:
GTimeZone* gobject_;
private:
public:
// g_time_zone_new() is deprecated in glib 2.68.
// We can't use the replacement g_time_zone_new_identifier(),
// which is new in glib 2.68. This version of glibmm does not require glib 2.68.
/** Creates a TimeZone corresponding to @a identifier.
*
* @a identifier can either be an RFC3339/ISO 8601 time offset or
* something that would pass as a valid value for the `TZ` environment
* variable (including nullptr).
*
* In Windows, @a identifier can also be the unlocalized name of a time
* zone for standard time, for example "Pacific Standard Time".
*
* Valid RFC3339 time offsets are `"Z"` (for UTC) or
* `"±hh:mm"`. ISO 8601 additionally specifies
* `"±hhmm"` and `"±hh"`. Offsets are
* time values to be added to Coordinated Universal Time (UTC) to get
* the local time.
*
* In UNIX, the `TZ` environment variable typically corresponds
* to the name of a file in the zoneinfo database, an absolute path to a file
* somewhere else, or a string in
* "std offset [dst [offset],start[/time],end[/time]]" (POSIX) format.
* There are no spaces in the specification. The name of standard
* and daylight savings time zone must be three or more alphabetic
* characters. Offsets are time values to be added to local time to
* get Coordinated Universal Time (UTC) and should be
* `"[±]hh[[:]mm[:ss]]"`. Dates are either
* `"Jn"` (Julian day with n between 1 and 365, leap
* years not counted), `"n"` (zero-based Julian day
* with n between 0 and 365) or `"Mm.w.d"` (day d
* (0 <= d <= 6) of week w (1 <= w <= 5) of month m (1 <= m <= 12), day
* 0 is a Sunday). Times are in local wall clock time, the default is
* 02:00:00.
*
* In Windows, the "tzn[+|–]hh[:mm[:ss]][dzn]" format is used, but also
* accepts POSIX format. The Windows format uses US rules for all time
* zones; daylight savings time is 60 minutes behind the standard time
* with date and time of change taken from Pacific Standard Time.
* Offsets are time values to be added to the local time to get
* Coordinated Universal Time (UTC).
*
* g_time_zone_new_local() calls this function with the value of the
* `TZ` environment variable. This function itself is independent of
* the value of `TZ`, but if @a identifier is nullptr then `/etc/localtime`
* will be consulted to discover the correct time zone on UNIX and the
* registry will be consulted or GetTimeZoneInformation() will be used
* to get the local time zone on Windows.
*
* If intervals are not available, only time zone rules from `TZ`
* environment variable or other means, then they will be computed
* from year 1900 to 2037. If the maximum year for the rules is
* available and it is greater than 2037, then it will followed
* instead.
*
* See
* [RFC3339 §5.6](http://tools.ietf.org/html/rfc3339#section-5.6)
* for a precise definition of valid RFC3339 time offsets
* (the `time-offset` expansion) and ISO 8601 for the
* full list of valid time offsets. See
* [The GNU C Library manual](http://www.gnu.org/s/libc/manual/html_node/TZ-Variable.html)
* for an explanation of the possible
* values of the `TZ` environment variable. See
* [Microsoft Time Zone Index Values](http://msdn.microsoft.com/en-us/library/ms912391%28v=winembedded.11%29.aspx)
* for the list of time zones on Windows.
*
* You should release the return value by calling g_time_zone_unref()
* when you are done with it.
*
* @newin{2,26}
*
* @param identifier A timezone identifier.
* @return The requested timezone.
*/
static TimeZone create(const Glib::ustring& identifier);
/** Creates a TimeZone corresponding to local time. The local time
* zone may change between invocations to this function; for example,
* if the system administrator changes it.
*
* This is equivalent to calling g_time_zone_new() with the value of
* the `TZ` environment variable (including the possibility of nullptr).
*
* You should release the return value by calling g_time_zone_unref()
* when you are done with it.
*
* @newin{2,26}
*
* @return The local timezone.
*/
static TimeZone create_local();
/** Creates a TimeZone corresponding to UTC.
*
* This is equivalent to calling g_time_zone_new() with a value like
* "Z", "UTC", "+00", etc.
*
* You should release the return value by calling g_time_zone_unref()
* when you are done with it.
*
* @newin{2,26}
*
* @return The universal timezone.
*/
static TimeZone create_utc();
/** Finds an interval within @a tz that corresponds to the given @a time.
* The meaning of @a time depends on @a type.
*
* If @a type is TIME_TYPE_UNIVERSAL then this function will always
* succeed (since universal time is monotonic and continuous).
*
* Otherwise @a time is treated as local time. The distinction between
* TIME_TYPE_STANDARD and TIME_TYPE_DAYLIGHT is ignored except in
* the case that the given @a time is ambiguous. In Toronto, for example,
* 01:30 on November 7th 2010 occurred twice (once inside of daylight
* savings time and the next, an hour later, outside of daylight savings
* time). In this case, the different value of @a type would result in a
* different interval being returned.
*
* It is still possible for this function to fail. In Toronto, for
* example, 02:00 on March 14th 2010 does not exist (due to the leap
* forward to begin daylight savings time). -1 is returned in that
* case.
*
* @newin{2,26}
*
* @param type The TimeType of @a time.
* @param time A number of seconds since January 1, 1970.
* @return The interval containing @a time, or -1 in case of failure.
*/
int find_interval(TimeType type, gint64 time) const;
/** Finds an interval within @a tz that corresponds to the given @a time,
* possibly adjusting @a time if required to fit into an interval.
* The meaning of @a time depends on @a type.
*
* This function is similar to g_time_zone_find_interval(), with the
* difference that it always succeeds (by making the adjustments
* described below).
*
* In any of the cases where g_time_zone_find_interval() succeeds then
* this function returns the same value, without modifying @a time.
*
* This function may, however, modify @a time in order to deal with
* non-existent times. If the non-existent local @a time of 02:30 were
* requested on March 14th 2010 in Toronto then this function would
* adjust @a time to be 03:00 and return the interval containing the
* adjusted time.
*
* @newin{2,26}
*
* @param type The TimeType of @a time.
* @param time A pointer to a number of seconds since January 1, 1970.
* @return The interval containing @a time, never -1.
*/
int adjust_time(TimeType type, gint64& time) const;
/** Determines the time zone abbreviation to be used during a particular
* @a interval of time in the time zone @a tz.
*
* For example, in Toronto this is currently "EST" during the winter
* months and "EDT" during the summer months when daylight savings time
* is in effect.
*
* @newin{2,26}
*
* @param interval An interval within the timezone.
* @return The time zone abbreviation, which belongs to @a tz.
*/
Glib::ustring get_abbreviation(int interval) const;
/** Determines the offset to UTC in effect during a particular @a interval
* of time in the time zone @a tz.
*
* The offset is the number of seconds that you add to UTC time to
* arrive at local time for @a tz (ie: negative numbers for time zones
* west of GMT, positive numbers for east).
*
* @newin{2,26}
*
* @param interval An interval within the timezone.
* @return The number of seconds that should be added to UTC to get the
* local time in @a tz.
*/
gint32 get_offset(int interval) const;
/** Determines if daylight savings time is in effect during a particular
* @a interval of time in the time zone @a tz.
*
* @newin{2,26}
*
* @param interval An interval within the timezone.
* @return true if daylight savings time is in effect.
*/
bool is_dst(int interval) const;
/** Get the identifier of this TimeZone, as passed to g_time_zone_new().
* If the identifier passed at construction time was not recognised, `UTC` will
* be returned. If it was nullptr, the identifier of the local timezone at
* construction time will be returned.
*
* The identifier will be returned in the same format as provided at
* construction time: if provided as a time offset, that will be returned by
* this function.
*
* @newin{2,60}
*
* @return Identifier for this timezone.
*/
Glib::ustring get_identifier() const;
};
#ifndef DOXYGEN_SHOULD_SKIP_THIS
// This is needed so Glib::TimeZone can be used with Glib::Value and _WRAP_PROPERTY.
template <>
class Value : public ValueBase_Boxed
{
public:
using CppType = Glib::TimeZone;
using CType = GTimeZone*;
static GType value_type();
void set(const CppType& data);
CppType get() const;
};
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
} // namespace Glib
namespace Glib
{
/** @relates Glib::TimeZone
* @param lhs The left-hand side
* @param rhs The right-hand side
*/
inline void swap(TimeZone& lhs, TimeZone& rhs) noexcept
{ lhs.swap(rhs); }
} // namespace Glib
namespace Glib
{
/** A Glib::wrap() method for this object.
*
* @param object The C instance.
* @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
* @result A C++ instance that wraps this C instance.
*
* @relates Glib::TimeZone
*/
GLIBMM_API
Glib::TimeZone wrap(GTimeZone* object, bool take_copy = false);
} // namespace Glib
#endif /* _GLIBMM_TIMEZONE_H */