结构体

GLibDate

描述 [src]

struct GDate {
  guint julian_days : 32;
  guint julian : 1;
  guint dmy : 1;
  guint day : 6;
  guint month : 4;
  guint year : 16;
}

GDate 是一个用于日历计算的构体。

GDate 数据结构表示从公元1年1月1日到数千年后的某一天(目前它能延伸到约为65535年,但 g_date_set_parse() 只能解析到约为8000年 - 只需要记住“数千年”)。GDate 希望表示日常日期,而不是天文日期或历史日期或类似的 ISO 时间戳。它将当前公历向前和向后时间外推;并没有试图调整日历以匹配时间段或地点。 GDate 不存储时间信息;它表示的是一天。

GDate 实现具有几个很好的特性;它只是一个64位结构,因此存储大量的日期非常高效。它可以保留日期的儒略日和年月日表示,因为使用某种表示形式进行某些计算要容易得多。儒略日表示法简单地是自某个过去的固定日期以来的天数;对于 GDate 来说,这个固定日期是公元1年1月1日。(GDate API 中的“儒略日”在技术意义上并不是真正的儒略日;技术上,儒略日从儒略周期的开始计算,即公元前4713年1月1日)。

GDate 的使用很简单。首先,你需要一个“空”日期;你可以从 g_date_new() 获取动态分配的日期,或者你可以声明一个自动变量或数组,并通过调用 g_date_clear() 来初始化它。清除的日期是安全的;可以调用 g_date_set_dmy() 以及其他修改器函数来初始化清除日期的值。但是,清除的日期最初是无效的,这意味着它不表示存在的某一天。在无效日期上调用任何日期计算例程是不确定的。如果您从用户或其他不可预测的来源获取日期,应使用 g_date_valid() 断言来检查其有效性。g_date_valid() 也用于检查 g_date_set_parse() 和其他可能失败的函数中的错误。通过再次调用 g_date_clear() 可以取消日期的有效性。

非常重要的一点是使用 API 来访问 GDate 结构。通常只有日/月/年或仅儒略表示是有效的。有时两者都无效。请使用 API

GLib 还具有表示精确时间的 GDateTime

结构成员
julian_days

日期的儒略日表示法。

julian

如果 julian_days 是有效的,则设置此位。

dmy

如果 daymonthyear 是有效的,则设置此位。

day

日期的日/月/年表示中的天,作为介于1和31之间的数字。

month

日期的日/月/年表示中的月,作为介于1和12之间的数字。

year

日期的日/月/年表示中的年。

构造函数

g_date_new

分配一个 GDate 并将其初始化为安全状态。新日期将清除(就像调用了 g_date_clear() 一样),但无效(它不会表示现有的某一天)。使用 g_date_free() 释放返回值。

g_date_new_dmy

创建一个表示给定日/月/年三元组的新的 GDate

g_date_new_julian

创建一个表示给定儒略日期的新的 GDate

函数

g_date_get_days_in_month

返回个月中的天数,考虑到闰年。

g_date_get_monday_weeks_in_year

返回年份中的周数,其中周是从星期一开始的。将是52或53。日期必须是有效的。(年份总是有52个7天周期,加上1或2个额外天,这取决于它是否是闰年。这个函数基本上是在告诉你年份中有多少个星期一,也就是说,如果其中一天是星期一的话,那么就会有53个星期一)。

g_date_get_sunday_weeks_in_year

返回年份中的周数,周从星期日开始计算。结果为52或53。日期必须有效。每年的7天周期总是52个,再加1或2天,取决于是否是闰年。此函数基本上告诉您一年中有多少个星期日,即如果额外的1天或2天中有一天的星期恰好是星期日,则会有53个星期日。

g_date_is_leap_year

如果年份是闰年,返回TRUE

g_date_strftime

按[区域设置][setlocale]特定的方式生成日期的打印表示形式。就像平台C库中的strftime()函数一样工作,但仅接受与日期相关的格式;与时间相关的格式将给出未定义的结果。日期必须有效。与strftime()(使用区域设置编码)不同,它使用UTF-8格式的字符串,并将UTF-8结果存储在其中。

g_date_valid_day

如果月份中的天是有效的,返回TRUE(天在1和31之间,包括1和31)。

g_date_valid_dmy

如果日期-日-月份三元组在GDate理解的日期范围内为有效且存在的日期,返回TRUE(从公元1年开始,不超过几千年的将来)。

g_date_valid_julian

如果儒略日是有效的,返回TRUE。任何大于零的儒略日基本上都是有效的,尽管存在32位限制。

g_date_valid_month

如果月份值是有效的,返回TRUE。12个GDateMonth枚举值是唯一有效的月份。

g_date_valid_weekday

如果星期是有效的,返回TRUE。七个GDateWeekday枚举值是唯一有效的星期。

g_date_valid_year

如果年份是有效的,返回TRUE。任何大于0的年份都是有效的,尽管GDate将对什么理解有16位限制。

实例方法

g_date_add_days

增加一个日期的天数。要前进几周,请加兴起算周的7天。日期必须有效。

g_date_add_months

通过一些月增加日期。如果月份的天大于28,这个程序可能会改变月份中的天数(因为目标月份可能没有当前的天)。日期必须有效。

g_date_add_years

通过一些年增加日期。如果日期是2月29日,而且目标年不是闰年,那么日期将改为2月28日。日期必须有效。

g_date_clamp

如果datemin_date之前,则将date设置为等于min_date。如果datemax_date之后,则将date设置为等于max_date。否则,date保持不变。min_datemax_date中任何一个都可以是NULL。所有非NULL日期都必须有效。

g_date_clear

初始化一个或多个GDate结构体到一个安全但无效的状态。清除的日期将不会表示现有的日期,但不会包含垃圾。用于在栈上声明日期的初始化。可以使用g_date_valid()测试其有效性。

g_date_compare

为日期提供Qsort风格的比较函数。两个日期都必须有效。

g_date_copy

将GDate复制到新建的GDate。如果输入是无效的(由g_date_valid()确定),则无效状态将按照原样复制到新对象中。

since: 2.56

g_date_days_between

计算两个日期之间的天数。如果 date2 早于 date1,则返回值是负数。两个日期都必须有效。

g_date_free

释放由 g_date_new 返回的 GDate

g_date_get_day

返回月份中的某一天。日期必须有效。

g_date_get_day_of_year

返回一年的某一天,其中1月1日是一年的第一天。日期必须有效。

g_date_get_iso8601_week_of_year

返回一年的星期,其中星期按ISO 8601标准解释。

since: 2.6

g_date_get_julian

返回GDate的儒略日或“序列号”。儒略日简单地表示从公元1年1月1日以来的天数;即公元1年1月1日是儒略日1;公元1年1月2日是儒略日2等。日期必须有效。

g_date_get_monday_week_of_year

返回一年的星期,其中星期从星期一开始。如果日期在当年的第一个星期一之前,返回0。日期必须有效。

g_date_get_month

返回年份的月份。日期必须有效。

g_date_get_sunday_week_of_year

返回该日期落在一年中的哪周,如果星期理解为一周的开始。日期必须有效。如果该天在当年第一个星期日之前,则返回0。

g_date_get_weekday

返回GDate的星期中的某一天。日期必须有效。

g_date_get_year

返回GDate的年份。日期必须有效。

g_date_is_first_of_month

如果日期是月初,则返回TRUE。日期必须有效。

g_date_is_last_of_month

如果日期是月末,则返回TRUE。日期必须有效。

g_date_order

检查 date1 是否小于或等于 date2,如果不是则交换这两个值。

g_date_set_day

GDate设置月份中的某一天。如果得到的结果(日-月-年)三元组无效,则日期将无效。

g_date_set_dmy

从日、月和年设置GDate的值。日-月-年三元组必须有效;如果您不确定它是否有效,请在设置之前调用 g_date_valid_dmy() 来检查。

g_date_set_julian

从儒略日号设置GDate的值。

g_date_set_month

GDate设置年份的月份。如果得到的结果(日-月-年)三元组无效,则日期将无效。

g_date_set_parse

解析用户输入的字符串 str,尝试确定它代表哪个日期,考虑当前的区域设置。[当前区域设置][setlocale]。如果字符串解析成功,则调用后将有效。否则,它将是无效的。您应该使用 g_date_valid() 检查解析是否成功。

g_date_set_time

GTime值设置日期值。日期到时间的转换使用用户的当前时区。

已弃用:2.10 

g_date_set_time_t

将日期设置为与指定为time_t的时间相对应的日期。日期到时间的转换使用用户的当前时区。

since: 2.10

g_date_set_time_val

GTimeVal值设置日期的值。请注意,tv_usec成员被忽略,因为GDate无法使用额外的精度。

已弃用:2.62 since: 2.10

设置GDate的年份

GDate设置年份。如果结果的天-月-年三元组无效,日期将无效。

g_date_subtract_days

将日期向前移动一些天数。通过周移动,只需将周数乘以7天即可。日期必须是有效的。

g_date_subtract_months

将日期向前移动一些月份。如果当前月份的天不存在于目标月份中,月份的天可能发生变化。日期必须是有效的。

g_date_subtract_years

将日期向前移动一些年。如果在目标年中当前的天不存在(例如,它是2月29日,并移动到非闰年),则该天将更改为2月29日。日期必须是有效的。

g_date_to_struct_tm

使用date值填充struct tm的日期相关部分。将非日期部分初始化为安全但无意义的内容。

g_date_valid

如果GDate表示一个存在的日期,则返回TRUE。日期不得包含垃圾数据;如果没有使用g_date_new()的变体分配,则应使用g_date_clear()初始化。