如何在日志中打印时间

获取当前系统时间(C语言版)

将当前系统时间打印在代码中,此文作为记录,如有问题欢迎提出

代码记录:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/time.h>

int main() {
    struct tm *localTime;
    struct timeval tv;

    // 设置时区为中国标准时间 (UTC+8)
    setenv("TZ", "Asia/Shanghai", 1);
    tzset();
	
	// 获取当前系统时间
    gettimeofday(&tv, NULL);
    localTime = localtime(&tv.tv_sec);

    long utcOffsetSeconds = localTime->tm_gmtoff;          // 提取时区偏移量
    int utcOffsetHours = utcOffsetSeconds / 3600;          // 将偏移量转换为小时
    int utcOffsetMinutes = (utcOffsetSeconds % 3600) / 60; // 将偏移量转换为分钟

    printf( "UTC offset %+.2d:%.2d %04d-%02d-%02d: %02d:%02d:%02d:%03d",
						utcOffsetHours, utcOffsetMinutes,
						localTime->tm_year + 1900, localTime->tm_mon + 1, localTime->tm_mday,
						localTime->tm_hour, localTime->tm_min, localTime->tm_sec, tv.tv_usec / 1000);
    return 0;
}

程序中将使用gettimeofday()函数获取当前时间,并使用localtime()函数将其转换为本地时间结构体struct tm。然后,通过访问tm_year、tm_mon和tm_mday字段,可以获取当前的年、月和日,并以指定格式打印出来

运行结果:UTC offset +08:00 2023-11-11: 09:57:43:309

如已知UTC时间偏移量,也可以在localtime函数执行前手动修改, 以时区偏移量为8举例,将其转换成秒,示例如下:

   	struct tm *localTime;
   	struct timeval tv;
   	gettimeofday(&tv, NULL);
   	time_t currentTime = tv.tv_sec + 8*60*60;
   	localTime = localtime(&currentTime);

参数介绍

1.struct tm 结构体

struct tm 结构体用于表示本地时间,可以通过使用 <time.h> 中的函数,如 localtime() 和 gmtime() 将时间转换为 struct tm 结构体,并使用 strftime() 函数将其格式化为字符串。
用localtime函数将时间数值变换成本地时间,考虑到本地时区和夏令时标志;

以下是 struct tm 的成员变量:

struct tm
{
    int tm_sec;     /* Seconds. [0-60] (1 leap second) */
    int tm_min;     /* Minutes. [0-59] */
    int tm_hour;      /* Hours. [0-23] */
    int tm_mday;      /* Day.   [1-31] */
    int tm_mon;     /* Month. [0-11] */
    int tm_year;      /* Year - 1900.  */
    int tm_wday;      /* Day of week. [0-6] */
    int tm_yday;      /* Days in year.[0-365] */
    int tm_isdst;     /* DST.   [-1/0/1]*/
 
# ifdef __USE_MISC
    long int tm_gmtoff;   /* Seconds east of UTC.  */
    const char *tm_zone;    /* Timezone abbreviation.  */
# else
    long int __tm_gmtoff;   /* Seconds east of UTC.  */
    const char *__tm_zone;  /* Timezone abbreviation.  */
# endif
};

2. gettimeofday()函数

gettimeofday() 用于获取当前时间的精确值。它返回了一个 struct timeval 结构体,其中包含秒数和微秒数。

以下是 struct timeval 的成员变量:
time_t tv_sec:表示从197011日开始的秒数(UNIX 时间戳)
suseconds_t tv_usec:表示微秒数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值