使用Mysql将UTC 12小时时间格式转换为印度时间

Sangeetha

我在Mysql中编写了一个事件调度程序,用于在用户旅行时间之前3小时生成票证。Mysl安装在服务器时间为UTC和12小时格式的服务器上,与IST时间相差5:30。我有一个用户的旅行时间是早上7:30,所以我需要在早上4:30为该用户生成票证。我正在获取当前服务器时间并转换为IST,并比较旅行时间和当前转换后的时差为3个小时。但是有些问题是它失败的原因,并且总是在早上10点创建票证。以下是我用Mysql编写的完整事件,

DELIMITER $$

ALTER EVENT `Auto_Generated_Ticket` ON SCHEDULE EVERY 1 MINUTE STARTS CURRENT_TIMESTAMP ON COMPLETION PRESERVE ENABLE DO BEGIN
     DECLARE UserId INT;
     DECLARE v_finished INT DEFAULT 0;
     DECLARE GetDate DATE DEFAULT DATE(NOW());


     /*get all active user's who's tariff enddate is > today and available journeys > 0 and pass-status=4(delivered)*/
     DECLARE ActiveUserId CURSOR FOR 
       SELECT UT.user_id FROM `um.user_trs.tariff` UT
    INNER JOIN `um.user` U ON U.user_id=UT.user_id
    INNER JOIN `um.user_ps.pass` UP ON UP.user_id=UT.user_id
    INNER JOIN `ps.pass` P ON P.pass_id=UP.pass_id
    WHERE UT.end_date >=DATE(NOW()) AND UT.available_journeys > 0 AND UT.current_balance>0 AND P.status_id=4
    GROUP BY UT.user_id;

     DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished=1;
     SET @GetTime= DATE_FORMAT(NOW(),'%Y-%m-%d %h:%i:%s %p');
     OPEN ActiveUserId;
       get_userid:LOOP
       FETCH ActiveUserId INTO UserId;
       IF v_finished=1 THEN
        LEAVE get_userid;
        END IF;

         SET @StartTime=(SELECT RS.start_time FROM `um.user_rm.route` UR 
                INNER JOIN `rm.route_schedule` RS ON RS.route_schedule_id=UR.route_schedule_id
                WHERE UR.user_id=UserId
                ORDER BY ABS( TIMEDIFF( RS.`start_time`, TIME(CONVERT_TZ(@GetTime,'+00:00','+05:30')) ) ) LIMIT 1);

         SET @TimeDiff=(HOUR(TIMEDIFF(@StartTime,TIME(CONVERT_TZ(@GetTime,'+00:00','+05:30')))));


          /*if time difference between current time and schedule start time is 3 hours then generate ticket for the user for that particular schedule*/
         IF (@TimeDiff =3) THEN
            /*IF (@TNumber IS NULL) THEN*/
            IF NOT EXISTS(SELECT ticket_number FROM `um.user_ts.ticket` WHERE route_id=@RouteId AND route_schedule_id=@RoutScheduleId
                   AND user_id=UserId AND DATE(date_of_issue)=@ISTDATE) THEN
             INSERT INTO `um.user_ts.ticket` 
                 (
                  `user_id`,`route_id`,`route_schedule_id`,`ticket_number`,`date_of_issue`,`is_cancelled`,
                  `amount_charged`,`user_tariff_id`,`opening_balance`,`is_auto_generated`
                 )
                VALUES
                (
                 UserId,@RouteId,@RoutScheduleId,@TicketNumber,CONVERT_TZ(UTC_TIMESTAMP(),'+00:00','+05:30'), 
                 FALSE,@PerJourneyCost,@UserTariffId,@TariffCurrentBalance,1
                );


           END IF;/*end of route and schedule check*/
         END IF; /*end of time difference check*/   
       END LOOP get_userid;
       CLOSE ActiveUserId;      
    END$$

DELIMITER ;

请让我知道是否有其他方法可以转换时间或我在上述查询中没有注意到的任何错误。

关于Sangeetha

cb0

有一个专用的mysql命令可以这样做。CONVERT_TZ(dt,from_tz,to_tz)看到这里https://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_convert-tz

从他们的文档:

CONVERT_TZ()将日期时间值dt从from_tz给定的时区转换为to_tz给定的时区,并返回结果值

也许该警告适用于您?

警告

如果您的系统具有zoneinfo数据库,请不要使用可下载的程序包。请改用mysql_tzinfo_to_sql实用程序。否则,可能会导致MySQL和系统上其他应用程序之间在日期时间处理上有所不同。

我将其分解为一个简单的示例,看看是否可行。这是测试基础知识的方法:

简单的例子:

SELECT CONVERT_TZ('2016-05-24 12:00:00','GMT','MET');

因此,您可以构建一个查询来确定timediff,如下所示:

HOUR(TIMEDIFF(CONVERT_TZ('2016-05-24 12:00:00','GMT','MET'),'2016-05-24 12:00:00'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从python将12小时时间格式转换为24小时格式

来自分类Dev

将12小时时间字符串转换为日期时间或时间

来自分类Dev

将AM / PM的12小时时间字符串转换为24小时时间

来自分类Dev

将时间列从 24 小时格式转换为 12 小时格式时排序不正确

来自分类Dev

将12小时格式的日期时间转换为猪的24小时?

来自分类Dev

仅将时间字符串转换为24小时时间

来自分类Dev

整小时和小数小时将双精度值转换为12小时制时钟格式时间

来自分类Dev

如何将日期和时间转换为12小时格式

来自分类Dev

如何将日期和时间转换为12小时格式

来自分类Dev

无法将 4 位整数值转换为 24 小时时间格式

来自分类Dev

将24小时格式的时间字符串(带有am / pm)转换为24小时格式的UTC

来自分类Dev

将奇数时间格式转换为小时

来自分类Dev

将12小时字符时间转换为24小时

来自分类Dev

NSDateFormatter:当iOS中的系统日期格式为24小时时,无法将12小时格式的字符串转换为日期

来自分类Dev

在python中将12小时时间格式转换为24小时时间格式(一天的记录)

来自分类Dev

在python中将12小时时间格式转换为24小时时间格式(一天的记录)

来自分类Dev

使用awk将日期时间戳从12小时转换为24

来自分类Dev

缺少某些时间时,使用strptime格式化时间,并将AM / PM转换为24小时格式

来自分类Dev

将日期时间转换为24小时格式时出错

来自分类Dev

使用javascript将UTC转换为标准日期时间格式

来自分类Dev

Python将时间转换为UTC格式

来自分类Dev

将UTC时间转换为CString格式

来自分类Dev

将 UTC 时间转换为纪元格式

来自分类Dev

将AM PM的日期时间转换为24小时日期格式

来自分类Dev

将24小时格式化的时间转换为十进制数

来自分类Dev

将字符串转换为24小时日期时间格式

来自分类Dev

在MySQL中将字符串转换为24小时日期时间格式

来自分类Dev

将24小时内的字符串转换为12小时AM PM时间

来自分类Dev

将24小时内的字符串转换为12小时AM PM时间

Related 相关文章

  1. 1

    从python将12小时时间格式转换为24小时格式

  2. 2

    将12小时时间字符串转换为日期时间或时间

  3. 3

    将AM / PM的12小时时间字符串转换为24小时时间

  4. 4

    将时间列从 24 小时格式转换为 12 小时格式时排序不正确

  5. 5

    将12小时格式的日期时间转换为猪的24小时?

  6. 6

    仅将时间字符串转换为24小时时间

  7. 7

    整小时和小数小时将双精度值转换为12小时制时钟格式时间

  8. 8

    如何将日期和时间转换为12小时格式

  9. 9

    如何将日期和时间转换为12小时格式

  10. 10

    无法将 4 位整数值转换为 24 小时时间格式

  11. 11

    将24小时格式的时间字符串(带有am / pm)转换为24小时格式的UTC

  12. 12

    将奇数时间格式转换为小时

  13. 13

    将12小时字符时间转换为24小时

  14. 14

    NSDateFormatter:当iOS中的系统日期格式为24小时时,无法将12小时格式的字符串转换为日期

  15. 15

    在python中将12小时时间格式转换为24小时时间格式(一天的记录)

  16. 16

    在python中将12小时时间格式转换为24小时时间格式(一天的记录)

  17. 17

    使用awk将日期时间戳从12小时转换为24

  18. 18

    缺少某些时间时,使用strptime格式化时间,并将AM / PM转换为24小时格式

  19. 19

    将日期时间转换为24小时格式时出错

  20. 20

    使用javascript将UTC转换为标准日期时间格式

  21. 21

    Python将时间转换为UTC格式

  22. 22

    将UTC时间转换为CString格式

  23. 23

    将 UTC 时间转换为纪元格式

  24. 24

    将AM PM的日期时间转换为24小时日期格式

  25. 25

    将24小时格式化的时间转换为十进制数

  26. 26

    将字符串转换为24小时日期时间格式

  27. 27

    在MySQL中将字符串转换为24小时日期时间格式

  28. 28

    将24小时内的字符串转换为12小时AM PM时间

  29. 29

    将24小时内的字符串转换为12小时AM PM时间

热门标签

归档