C语言获取并格式化时间
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
前几天使用AWS V4签名时,需要一种特殊时间格式(NNNNMMDDTHHMMSSZ),在node还是比较好拼装,但C里面还没有拼这种比较奇怪的格式。这里记录下一下过程。
环境:Linux Ubuntu
1 函数
主要涉及到time.h头文件中以下三个函数 :
1.1 time
time_t time(time_t *t);
time() 是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型。
1.2 gmtime
struct tm *gmtime(const time_t *timep);
gmtime是把日期和时间转换为格林威治(GMT)时间的函数。然后将结果由结构tm返回。
1.3 struct tm
struct tm {
int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的时候,tm_isdst为0;不了解情况时,tm_isdst()为负。
long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
};
1.4 sprintf
int sprintf( char *buffer, const char *format, [ argument] … );
sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性, 所以请预估好要格式化的大小。
参数:
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]…:可选参数,可以是任何类型的数据。
返回:
返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。
2 Sample Code
#include <time.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int getTimeString(char* timeStr){
time_t times = time(NULL);
struct tm* utcTime = gmtime(×);
int timeStrLen = sprintf(timeStr, "%04d%02d%02dT%02d%02d%02dZ", utcTime->tm_year+1900, utcTime->tm_mon+1, utcTime->tm_mday, utcTime->tm_hour, utcTime->tm_min, utcTime->tm_sec);
return timeStrLen;
}
int main(void){
char timeStr[40];
int timeStrLen = getTimeString(timeStr);
printf("%s %d\n", timeStr, timeStrLen);
return 0;
}
编译测试:
gcc test.c -o sample
./sample
输出:
20180806T114445Z 16
GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献10条内容
所有评论(0)