我想了解如何在下面的代码中计算 yyTimezone
:
| bare_time '+' tUNUMBER {
/* "7:14+0700" */
yyDSTmode = DSToff;
yyTimezone = - ($3 % 100 + ($3 / 100) * 60);
}
| bare_time '-' tUNUMBER {
/* "19:14:12-0530" */
yyDSTmode = DSToff;
yyTimezone = + ($3 % 100 + ($3 / 100) * 60);
}
我的理解是,假设时间戳是 2011-01-02T10:15:20-04:00
;这意味着它比 UTC
晚了 0400
小时。因此,要将其转换为 UTC
,请向其添加 0400
小时,它会变为 2011-01-02T14:15:20
。我的理解正确吗?
我上面粘贴的代码块是如何实现的?
最佳答案
输入会将偏移量编码为 -0400
。 0400
部分将作为 tUNUMBER
标记返回(可能包含一个无符号值)。此标记符合语法规则,可用作$3
。
要从值 400
获取以分钟为单位的实际偏移量,您首先必须将其分成两半。小时部分可以用$3/100
(即4
)得到,分钟部分用$3 % 100
(即 >0
)。由于一小时有 60 分钟,因此您将小时数乘以 60,然后将分钟数加上 ($3 % 100 + ($3/100) * 60
),得到值 >240
。然后剩下的就是添加符号,并将其存储在 yyTimezone
中。
毕竟,yyTimezone
将包含以分钟为单位的时区偏移量。
关于c - getdate.y语法疑惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7185737/