【问题标题】:Can someone tell me why my hour won't print the actual hour?有人能告诉我为什么我的时间不会打印实际时间吗?
【发布时间】:2019-10-29 08:24:31
【问题描述】:

我不知道我的逻辑有什么问题:

#include <stdio.h>
#include <time.h>

int main() {

    time_t seconds=time(NULL);

    int time[5] = { 1,60,3600,86400,31536000 };
    int second = (seconds % time[1])/time[0];
    int minute = (seconds % time[2])/time[1];
    int hour = (seconds % time[3])/time[2];

    printf("%d:%d:%d\n", hour, minute, second);

}

它没有显示错误,但我无法打印准确的时间。

【问题讨论】:

  • 那么它做了什么
  • 不是您的直接问题,但time 已经是标准库中函数的标识符。您正在使用它的另一个含义,导致 UB。
  • 您看到了什么,您期待什么?请注意hour will be in UTC by default,所以我猜你的时区小时数已经出来了。
  • @pmg 不错,但如果该网站也显示当地时间会更有用。

标签: c time hour


【解决方案1】:

我不依赖这些手动转换,而是使用struct tm 并将转换留给localtime 函数:

#include <time.h>
int main() {

    time_t now;
    struct tm *now_tm;
    int hour, minute, second;

    now = time(NULL);
    now_tm = localtime(&now);
    hour = now_tm->tm_hour;
    minute = now_tm->tm_min;
    second = now_tm->tm_sec;

    printf("%d:%d:%d\n", hour, minute, second);
}

这还可以处理您观察到的小时偏移量,我认为这是由于时区差异造成的。

【讨论】:

    【解决方案2】:

    你的逻辑很好。只是你不住在Greenwich, London附近。

    【讨论】:

    • 你不需要住在格林威治附近;您可以住在格林威治经度上的任何地方(即格林威治以北或以南的任何地方)。
    • 英国、爱尔兰、冰岛、葡萄牙和一些西非国家:timeanddate.com/time/map
    猜你喜欢
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多