我正在尝试将时间从UTC时间/日期转换为新西兰基督城的时间。 PS,我是一名初学者。
我可以轻松识别时区偏移并考虑夏令时。我的问题是,如何添加UTC和偏移时间(+1200)
int timeConverted (int utcTime, int timezoneOffset) {
int answer = 0;
int totalTime = utctime + timezoneOffset;
int timeAdded = totalTime;
if (timeAdded > 2359) {
answer = timeAdded - 2400;
}
return answer;
当我这样做时,我会得到一些有趣的答案。这是澳大利亚阿德莱德的时间
输入是1659 Out是189(答案应该是229)
我只能使用if语句(没有数组或类似的东西)
答案 0 :(得分:1)
如果我理解你的问题,并且你想获取UTC时间和时区偏移然后计算当地时间(对于澳大利亚阿德莱德,+930
时区偏移),那么你有3个案例要处理:
59
? (如果是,请添加40
)2359
? (如果这样减去2400
)0
(如果是,请添加2400
)您可以通过相当简单的方式处理:
int timeConverted (int utcTime, int timezoneOffset) {
int answer = utcTime + timezoneOffset,
utcmin = utcTime % 100, /* consider minutes */
offmin = timezoneOffset % 100; /* from each time */
if (utcmin + offmin > 59) /* handle minutes 60-99 */
answer += 40;
if (answer > 2359) /* answer greater than 2359 */
answer -= 2400;
if (answer < 0) /* answer less than 0 */
answer += 2400;
return answer;
}
将它完全放在一个简单的例子中,它将utcTime
作为程序的第一个参数(1659
默认值)并将timezoneOffset
作为第二个参数(1200
默认值),您可以执行以下操作:
#include <stdio.h>
#include <stdlib.h>
int timeConverted (int utcTime, int timezoneOffset) {
int answer = utcTime + timezoneOffset,
utcmin = utcTime % 100, /* consider minutes */
offmin = timezoneOffset % 100; /* from each time */
if (utcmin + offmin > 59) /* handle minutes 60-99 */
answer += 40;
if (answer > 2359) /* answer greater than 2359 */
answer -= 2400;
if (answer < 0) /* answer less than 0 */
answer += 2400;
return answer;
}
int main (int argc, char **argv) {
int utc = argc > 1 ? strtol (argv[1], NULL, 0) : 1659,
tzo = argc > 2 ? strtol (argv[2], NULL, 0) : 1200;
printf ("utcTime : %d\noffset : %d\nlocal : %d\n",
utc, tzo, timeConverted (utc, tzo));
}
(注意:设置timezoneOffset
这两个参数都是必需的)
示例使用/输出
$ ./bin/tzoffset 1659 930
utcTime : 1659
offset : 930
local : 229
仔细看看,如果您有其他问题,请告诉我。 (如果我误解了你的问题,也请告诉我)
是的,现在2359 845
正常工作,例如
示例使用/输出
$ ./bin/tzoffset 2359 845
utcTime : 2359
offset : 845
local : 844