美文网首页
sql 时区 夏令时 冬令时

sql 时区 夏令时 冬令时

作者: Creep_hz | 来源:发表于2018-01-02 15:58 被阅读0次

CREATE DEFINER = CURRENT_USER FUNCTION `func_time_europe_to_beijing`(`europe_time` datetime)

RETURNS datetime

    COMMENT '欧洲中部时间(带夏令时)转换成北京时间'

BEGIN

DECLARE is_summer INT ;

DECLARE summer_start_date , summer_end_date DATETIME;

DECLARE day_of_week INT ;

-- 获取当年夏令时的开始和结束时间

-- 欧洲中部夏令时:每年3月最后一个周日凌晨2点开始,至10月最后一个周日凌晨2点结束

SET summer_start_date = STR_TO_DATE(concat(year(europe_time),'-03-31 02:00:00' ),'%Y-%m-%d %H:%i:%s'); -- 当年3月最后一天

SET day_of_week = DAYOFWEEK(summer_start_date);

IF day_of_week > 1 THEN

SET summer_start_date = ADDDATE(summer_start_date,INTERVAL 1-day_of_week DAY);-- 往前倒推至最近一个周日

END IF;

SET summer_end_date = STR_TO_DATE(concat(year(europe_time),'-10-31 02:00:00' ),'%Y-%m-%d %H:%i:%s'); -- 当年10月最后一天

SET day_of_week = DAYOFWEEK(summer_end_date);

IF day_of_week > 1 THEN

SET summer_end_date = ADDDATE(summer_end_date,INTERVAL 1-day_of_week DAY);-- 往前倒推至最近一个周日

END IF;

IF europe_time > summer_start_date AND

europe_time < summer_end_date THEN

SET is_summer = 1;

END IF;

IF is_summer = 1 THEN

-- 夏令时比UTC快两个小时

RETURN convert_tz(europe_time, '+02:00', '+08:00');

ELSE

-- 冬令时比UTC快一个小时

RETURN convert_tz(europe_time, '+01:00', '+08:00');

END IF;

END;

CREATE DEFINER = CURRENT_USER FUNCTION `func_time_beijing_to_europe`(`beijing_time` datetime)

RETURNS datetime

    COMMENT '北京时间转换成欧洲中部时间(带夏令时)'

BEGIN

DECLARE is_summer INT ;

DECLARE summer_start_date , summer_end_date DATETIME;

DECLARE day_of_week INT ;

-- 获取当年夏令时的开始和结束时间

-- 欧洲中部夏令时:每年3月最后一个周日凌晨2点开始,至10月最后一个周日凌晨2点结束

SET summer_start_date = STR_TO_DATE(concat(year(beijing_time),'-03-31 02:00:00' ),'%Y-%m-%d %H:%i:%s'); -- 当年3月最后一天

SET day_of_week = DAYOFWEEK(summer_start_date);

IF day_of_week > 1 THEN

SET summer_start_date = ADDDATE(summer_start_date,INTERVAL 1-day_of_week DAY);-- 往前倒推至最近一个周日

END IF;

SET summer_end_date = STR_TO_DATE(concat(year(beijing_time),'-10-31 02:00:00' ),'%Y-%m-%d %H:%i:%s'); -- 当年10月最后一天

SET day_of_week = DAYOFWEEK(summer_end_date);

IF day_of_week > 1 THEN

SET summer_end_date = ADDDATE(summer_end_date,INTERVAL 1-day_of_week DAY);-- 往前倒推至最近一个周日

END IF;

IF beijing_time > summer_start_date AND

beijing_time < summer_end_date THEN

SET is_summer = 1;

END IF;

IF is_summer = 1 THEN

-- 夏令时比UTC快两个小时

RETURN convert_tz(beijing_time, '+02:00', '+08:00');

ELSE

-- 冬令时比UTC快一个小时

RETURN convert_tz(beijing_time, '+01:00', '+08:00');

END IF;

END;;

相关文章

  • sql 时区 夏令时 冬令时

    CREATE DEFINER = CURRENT_USER FUNCTION `func_time_europe_...

  • 初到美国有什么习惯需要习惯(下)

    生活 夏令时和冬令时转换 美国这边实行夏令时和冬令时转化,也就是会有summer time和winter time...

  • 夏令时

    记得在我读小学时就已经有夏令时,但那时候并不觉得夏令时与冬令时有什么区别。不管是冬令时还是夏令时,上学放学时间都是...

  • 夏令时和冬令时

    前言:今天和朋友聊天的时候说到了时差的问题,慢慢又扯到了夏令时和冬令时,然鹅。。我确实不太了解夏令时和冬令时的具体...

  • 美股冬令时与夏令时简介

    背景 我们知道,在美股的交易时间是分冬令时和夏令时的。而在冬令时、夏令时对应的北京交易时段也是不一样的。 如下所示...

  • lua根据服务器时间戳显示格式化的时间

    os.date().isdst可以根据所设定的 时间与本机所设的时区获取是否处于夏令时是夏令时的时候需要减-3600

  • 港美股和A股的区别

    交易时间段美股夏令时:21:30-4:00冬令时:10:30-5:00 (注:美国夏令时是3月11日到11月7...

  • 游戏时区问题小解

    由于时区、夏令时的存在,游戏内的时间显示/计算都要考虑时区问题并进行相应处理。时间计算不用说,要排除玩家本地时区影...

  • 浅解 JAVA与时区

    时区转换 主要介绍一下 Java 时区转换相关的一些概念,和转换示例。 由于夏令时的存在,应该通过Java 或者 ...

  • 【windows】windows 10系统时区调整

    1、控制面板-时钟和区域-日期和时间-更改时区-选择国家时区,如果需要的话,记得调整夏令时。 2、协调世界时(Un...

网友评论

      本文标题:sql 时区 夏令时 冬令时

      本文链接:https://www.haomeiwen.com/subject/fqqqnxtx.html