结构体
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
如果
day
、month
和year
是有效的,则设置此位。day
日期的日/月/年表示中的天,作为介于1和31之间的数字。
month
日期的日/月/年表示中的月,作为介于1和12之间的数字。
year
日期的日/月/年表示中的年。
构造函数
g_date_new
分配一个 GDate
并将其初始化为安全状态。新日期将清除(就像调用了 g_date_clear() 一样),但无效(它不会表示现有的某一天)。使用 g_date_free() 释放返回值。
函数
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_strftime
按[区域设置][setlocale]特定的方式生成日期的打印表示形式。就像平台C库中的strftime()
函数一样工作,但仅接受与日期相关的格式;与时间相关的格式将给出未定义的结果。日期必须有效。与strftime()
(使用区域设置编码)不同,它使用UTF-8格式的字符串,并将UTF-8结果存储在其中。
实例方法
g_date_clamp
如果date
在min_date
之前,则将date
设置为等于min_date
。如果date
在max_date
之后,则将date
设置为等于max_date
。否则,date
保持不变。min_date
和max_date
中任何一个都可以是NULL
。所有非NULL
日期都必须有效。
g_date_clear
初始化一个或多个GDate
结构体到一个安全但无效的状态。清除的日期将不会表示现有的日期,但不会包含垃圾。用于在栈上声明日期的初始化。可以使用g_date_valid()
测试其有效性。
g_date_set_parse
解析用户输入的字符串 str
,尝试确定它代表哪个日期,考虑当前的区域设置。[当前区域设置][setlocale]。如果字符串解析成功,则调用后将有效。否则,它将是无效的。您应该使用 g_date_valid()
检查解析是否成功。