• linux时区相关


    • 背景:用linux自带的时间接口函数读取时间的时候,发现有时候时间与北京时间不符合,经过研究发现:时间 = UTC时间+时区带来的偏移。
    • 操作方法:timedatectl list-timezones可看支持的时区
    • 改时区方法有如下两种:
    1. ln -sf /usr/bin/Shanghai /etc/localtime       // /usr/bin/Shanghai一般是ubuntu自带。
    2. timedatectl set-timezone Asia/Shanghai
    • date命令里有时区参数: CST代表中国标准时间。等于UTC+8

    时间接口文档

    time(2) - Linux manual page

    //接口时间变化

    深入理解Linux时间子系统(0.7)_城中之城的博客-CSDN博客_linux时间子系统

    • 配置 /etc/localtime 文件,链接到/usr/bin/Shanghai文件 (ln -sf /etc/localtime Shanghai) [Shanghai需要写为当前系统文件,可用ubuntu的/usr/bin/Shanghai文件]
    • timedatectl命令:可看到时间和时区
    1. root@pc123:/# timedatectl
    2. Local time: Wed 2020-12-16 18:33:37 UTC
    3. Universal time: Wed 2020-12-16 18:33:37 UTC
    4. RTC time: Thu 1970-01-01 01:08:42
    5. Time zone: UTC (UTC, +0000)
    6. System clock synchronized: no
    7. NTP service: active
    8. RTC in local TZ: no
    • 时间

    需要注意图中虚线的部分表示这个时间受到时区的影响!!!,

    localtime,mktime,strftime函数受到环境变量TZ的影响

    而时区可通过tzset和设置环境变量去影响localtime

    • 工具timedatectl 即可查看系统时间和时区
    1. root@pc123:/usrdata# timedatectl
    2. Local time: Wed 2020-12-16 18:54:43 UTC
    3. Universal time: Wed 2020-12-16 18:54:43 UTC
    4. RTC time: Thu 1970-01-01 01:29:55
    5. Time zone: UTC (UTC, +0000)
    6. System clock synchronized: no
    7. NTP service: active
    8. RTC in local TZ: no
    • timedatectl list-timezones   //查看当前支持的时区
    • hwclock -w    保存到rtc时间
    • 时区如何设置?

    gettimeofday和settimeofday可读取/设置时间,时区。

    时间相关的系统调用和实现原理

    clock_gettime:系统调用到调用do_clock_gettime

    --->ktime_get_real_ts64

    ---->一步步跟进去发现是调用timekeep的 nsecs = timekeeping_get_ns(&tk->tkr_mono);

    1. int do_clock_gettime(clockid_t which_clock, struct timespec64 *tp)
    2. {
    3. switch (which_clock) {
    4. case CLOCK_REALTIME:
    5. ktime_get_real_ts64(tp);
    6. break;
    7. case CLOCK_MONOTONIC:
    8. ktime_get_ts64(tp);
    9. break;
    10. case CLOCK_BOOTTIME:
    11. get_monotonic_boottime64(tp);
    12. break;
    13. default:
    14. return -EINVAL;
    15. }
    16. return 0;
    17. }

  • 相关阅读:
    学习笔记之——C语言 函数
    网络数据采集-免费全网数据采集软件
    Redis消息队列
    LeetCode第13题:罗马数字转整数
    jquery漂亮的翻书效果应用于tp项目中
    使用 Lhotse 高效管理音频数据集
    交换机基础(四):MSTP负载均衡配置案例
    Fastjson反序列化随机性失败
    在商业领域如何开展数据挖掘
    基于图搜索的规划算法之A*家族(一):A*算法
  • 原文地址:https://blog.csdn.net/m0_37844072/article/details/127317347