C语言如何获取本地时间,然后取时、分、秒的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言如何获取本地时间,然后取时、分、秒的值?相关的知识,希望对你有一定的参考价值。

分别取时、分、秒的数值,这个数值用于下一步操作的。

比如现在时间是 19:42
那么 我怎么才能获得42这个秒数值呢?
秒数值42要赋值给P用的
P=42

P用于下一个函数的。

C语言有2个获取时间的函数,分别是time()和localtime(),time()函数返回unix时间戳-即从1970年1月1日0:00开始所经过得秒数,而localtime()函数则是将这个秒数转化为当地的具体时间(年月日时分秒)

这里时间转化要用到一个“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日 */

int tm_isdst;    /* 夏令时标识符,夏令时tm_isdst为正;不实行夏令时tm_isdst为0 */    

;

示例代码:

#include<stdio.h>

#include<time.h>

int getTime()

time_t t;                   //保存unix时间戳的变量 ,长整型

struct tm* lt;           //保存当地具体时间的变量

int p;                       

time(&t);                // 等价于 t =time(NULL);获取时间戳

lt = localtime(&t);  //转化为当地时间

p = lt->tm_sec;     //将秒数赋值给p

return p;

应该就是这样啦~

追问

为什么我的软件没有时间函数啊! 识别不了time_t

追答

time_t包含在头文件里,你看看你有没有添加#include头文件

参考技术A

#include <stdio.h>

#include <time.h>

int main()

time_t timep;

struct tm *tp;

time(&timep);

int p;

tp = localtime(&timep); //取得系统时间

printf("Today is %d-%d-%d\\n", (1900 + tp->tm_year), (1 + tp->tm_mon), tp->tm_mday);

printf("Now is %d:%02d:%02d\\n", tp->tm_hour, tp->tm_min, tp->tm_sec);

p=tp->tm_sec;

printf("p=%d\\n",p);

return 0;

追问

识别不了time_t 怎么回事啊
头文件
#include
#include
都没用啊
我用的是 Psoc Designer 5.4,请问这个C软件没有时间函数的吗?

参考技术B

#include
#include
int main()
char wday[][4]="Sun","Mon","Tue","Wed","Thu","Fri","Sat";
time_t timep;
struct tm *p;
time(&timep);
p = localtime(&timep); //取得系统时间
printf("Today is %s %d-%d-%d\\n", wday[p->tm_wday], (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday);
printf("Now is %d:%02d:%02d\\n", p->tm_hour, p->tm_min, p->tm_sec);
system("pause");
return 0;


追问

我的time_t 无法识别,咋回事

追答

你把time_t改为long试试?

参考技术C

#include <stdio.h>

#include <time.h>

/* In <time.h>

struct tm

...

int tm_hour;    // 小时

int tm_min;    // 分钟

int tm_sec;    // 秒数

...

;

*/

int main()    // 主函数

int P;

time_t tNow;    // 声明

time(&tNow);    // 获取时间戳

struct tm* sysLocal;    // 声明

sysLocal = localtime(&tNow);    // 本地化时间(我们是UTC+8时)

P = sysLocal->tm_sec;    //     加粗体可以是其它值(tm_hour/tm_min/...)

printf("%d", P);    // 输出

return 0;    // 结束

提醒一句——xx:xx后面的xx是分钟,xx:xx.xx中.后面的xx才是秒数

参考技术D #include<stdio.h>
#include<time.h>
int main()

time_t t = time(NULL);
struct tm *info = localtime(&t);
printf("现在是:");
printf("%d年%02d月%02d日 ", info->tm_year + 1900, info->tm_mon + 1, info->tm_mday);
printf("%02d:%02d:%02d", info->tm_hour, info->tm_min, info->tm_sec);
return 0;
追问

秒数的值呢?P怎么提取这个值
t=tm.tm_sec;
P=t;
这样可以吗?

追答

如果你认真读了上面的程序,并且具有基本的C语言知识,你应该已经知道年月日时分秒这六个值分别怎么取。

追问

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

头文件也加了,

不行啊,根本无法识别time_t

如何根据当前时间戳计算每天0点0分0秒的unix时间戳?

参考技术A 当日0点的计算方法:
strtotime(date('Y-m-d', time()));
或者
strtotime("today");

然后加/减相隔的天数就是了

以上是关于C语言如何获取本地时间,然后取时、分、秒的值?的主要内容,如果未能解决你的问题,请参考以下文章

Git:区分本地和远程标签

C语言中如何调用本地时间

用c语言如何获取系统当前时间的函数?

获取本地时区的 Olson TZ 名称?

jquery easyui datagrid 获取所有数据,不是当前页的数据,而是全部。。。

Swift/Cloudkit:在拉取时处理用户更改