【夏令时】
夏令时也称夏日节约时间,是指在夏天太阳升起的比较早时,将时钟拨快一小时,以提高日光的使用。支持时区是支持夏令时的前提,不同的时区对夏令时的支持不同。只有在使用夏令时的时区内,夏令时才能起作用。
以美国为例:
从2007年起,每年3月的第二个星期天的凌晨2点开始,11月的第一个星期天的凌晨2点为止,为夏令时。其他的时间为冬令时或者当地的标准时间。
【参数说明】
system_time_zone参数: 显示操作系统的时区。
time_zone: 当前session中gbase使用的时区,session级变量,可在配置文件中使用default-time-zone进行设置,或使用set time_zone进行修改。
time_zone的值有三种形式:
a)system: time_zone的值同system_time_zone的值相同,如果配置文件里面没有设置,该值为默认值。
b)UTC表示的偏移:范围为 [-12:59, 13:00], 例如‘+8:00’ 表示的是东八区。
c)时区名:从time_zone_name中能查出的时区的名字, 例如Asia/Shanghai 表示上海所在的时区。
【系统表】
时区用到的系统表如下:
time_zone
time_zone_name
time_zone_transition
time_zone_transition_type
支持润秒的时候需要用到下面的表:
time_zone_leap_second
8.6.2Build33版本集群安装完后,已经加载好时区系统表。
升级的时候,需要手动加载gbase_time_zone.sql到时区系统表。在安装包的gcinstall目录下的gbase_data_timezone.sql文件。
执行gccli –uroot –Dgbase < gbase_data_timezone.sql,和各gnode节点执行gncli –u root –Dgbase<file_name;
停止集群;然后重启集群使时区生效。
【使用不同的时区】
gbase> set time_zone=’+8:00’;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> show variables like ‘%time_zone%’;
±-----------------±-------+
| Variable_name | Value |
±-----------------±-------+
| system_time_zone | CST |
| time_zone | +08:00 |
±-----------------±-------+
2 rows in set (Elapsed: 00:00:00.00)
gbase> set time_zone=‘SYSTEM’;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> show variables like ‘%time_zone%’;
±-----------------±-------+
| Variable_name | Value |
±-----------------±-------+
| system_time_zone | CST |
| time_zone | SYSTEM |
±-----------------±-------+
2 rows in set (Elapsed: 00:00:00.00)
gbase> set time_zone=‘US/Central’;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
如果数据库不能正常支持夏令时,这一步骤会报错“ERROR 1298 (HY000): Unknown or incorrect time zone: ‘US/Central’”
gbase> show variables like ‘%time_zone%’;
±-----------------±-----------+
| Variable_name | Value |
±-----------------±-----------+
| system_time_zone | CST |
| time_zone | US/Central |
±-----------------±-----------+
2 rows in set (Elapsed: 00:00:00.00)
【使用夏令时】
a)在夏令时内,系统时间跟gbase内时间一致。
修改系统时区
cp /usr/share/zoneinfo/US/Pacific /etc/localtime
修改系统时间为夏令时时间内:
[root@localhost ~]# date -s ‘2017-3-11 5:00:00’
Sat Mar 11 05:00:00 PST 2017
[root@localhost ~]# hwclock -w
[root@localhost ~]# date ‘+%Y-%m-%d %H:%M:%S’
2017-03-11 05:04:22
gbase> set time_zone=‘SYSTEM’;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> show variables like ‘%zone%’;
±-----------------±-------+
| Variable_name | Value |
±-----------------±-------+
| system_time_zone | PST |
| time_zone | SYSTEM |
±-----------------±-------+
2 rows in set (Elapsed: 00:00:00.00)
gbase> ! date ‘+%Y-%m-%d %H:%M:%S’
2017-03-11 05:06:06
gbase> select now();
±--------------------+
| now() |
±--------------------+
| 2017-03-11 05:06:10 |
±--------------------+
1 row in set (Elapsed: 00:00:00.00)
! date 的结果是操作系统时间,Select now()的结果是数据库时间,数据库时间与操作系统时间一致。系统时区支持夏令时,数据库即支持夏令时。
b)convert_tz函数,在支持夏令时的时区内转换。
gbase> SELECT CONVERT_TZ(‘2007-03-11 2:00:00’,‘US/Eastern’,‘US/Central’);
±-----------------------------------------------------------+
| CONVERT_TZ(‘2007-03-11 2:00:00’,‘US/Eastern’,‘US/Central’) |
±-----------------------------------------------------------+
| 2007-03-11 01:00:00 |
±-----------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.02)
gbase> SELECT CONVERT_TZ(‘2007-03-11 3:00:00’,‘US/Eastern’,‘US/Central’);
±-----------------------------------------------------------+
| CONVERT_TZ(‘2007-03-11 3:00:00’,‘US/Eastern’,‘US/Central’) |
±-----------------------------------------------------------+
| 2007-03-11 01:00:00 |
±-----------------------------------------------------------+
如果数据库不能正常支持夏令时,以上结果集为NULL。




