你如何一起增加时间?

时间:2018-04-09 02:29:17

标签: c function int

我正在尝试将时间从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语句(没有数组或类似的东西)

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,并且你想获取UTC时间和时区偏移然后计算当地时间(对于澳大利亚阿德莱德,+930时区偏移),那么你有3个案例要处理:

  1. 得出的分钟数大于59? (如果是,请添加40
  2. 得出的答案大于2359? (如果这样减去2400
  3. 的结果答案小于0(如果是,请添加2400
  4. 您可以通过相当简单的方式处理:

    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