Linux的时间操作

本文详细介绍了Linux系统中的时间操作,包括time_t类型、time()函数、tm结构体的使用、localtime()和mktime()函数的功能,以及程序如何通过sleep()和usleep()进行睡眠控制。
摘要由CSDN通过智能技术生成


一、time_t别名

  1. time_t用来表示时间类型,它是long的别名,在<time.h>中定义,表示从1970年1月1日到现在的秒数。
  2. 声明一个时间类型的变量:long tt或者time_t tt(推荐后一种写法)

二、time()库函数

  1. time()库函数用于获取操作系统当前的时间
  2. 包含头文件:<time.h>
  3. 声明:time_t time(time_t *tloc)
  4. 调用方法:
    time_t now = time(0); 将空地址传给time(),并将返回值赋给now

    time_t now; time(&now); 将变量now的地址作为参数传递给time()
  • 示例:
#include <iostream>
#include <time.h>
using namespace std;

int main()
{
    time_t now = time(0);
    long now1;
    time(&now1);
    cout << "now: " << now << endl;
    cout << "now1: " << now1 << endl;
    return 0;
}

三、tm结构体

  • time_t是一个长整数,不符合人类的使用习惯,需要转换成tm结构体,tm结构体在<time.h>中声明,如下:
struct tm
{
  int tm_year;	// 年份:其值等于实际年份减去1900
  int tm_mon;	// 月份:取值区间为[0,11],其中0代表一月,11代表12月
  int tm_mday;	// 日期:一个月中的日期,取值区间为[1,31]
  int tm_hour; 	// 时:取值区间为[0,23]
  int tm_min;	// 分:取值区间为[0,59]
  int tm_sec;     	// 秒:取值区间为[0,59]
  int tm_wday;	// 星期:取值区间为[0,6],其中0代表星期天,6代表星期六
  int tm_yday;	// 从每年的1月1日开始算起的天数:取值区间为[0,365] 
  int tm_isdst;   // 夏令时标识符,该字段意义不大
};

四、localtime()库函数

  • localtime()函数用于把time_t表示的时间转换为tm结构体表示的时间。
  • localtime()函数不是线程安全的,localtime_r()是线程安全的。
  • 头文件:<time.h>
  • 函数声明:
    struct tm *localtime(const time_t *timep);
    struct tm *localtime_r(const time_t *timep, struct tm *result);
  • 示例:
#include <iostream>
#include <cstring>
#include <time.h>
using namespace std;

int main()
{
    time_t now = time(0);
    cout << "now: " << now << endl;
    tm tmnow;
    // 将time_t时间转换成tm结构体
    localtime_r(&now, &tmnow);
    // 拼接成中国习惯的表示时间
    string time_str = to_string(tmnow.tm_year + 1900) + '-'
        + to_string(tmnow.tm_mon + 1) + '-'
        + to_string(tmnow.tm_mday) + '-'
        + to_string(tmnow.tm_hour) + '-'
        + to_string(tmnow.tm_min) + '-'
        + to_string(tmnow.tm_sec);
    cout << time_str << endl;

    return 0;
}

五、mktime()库函数

  • mktime()函数的功能与localtime()函数相反,用于把tm结构体时间转换为time_t时间。
  • 包含头文件:<time.h>
  • 函数声明:time_t mktime(struct tm *tm);
  • 该函数主要用于时间的运算,例如:把2022-02-28 23:42:2530分钟。
  • 思路:
    1)解析字符串格式的时间,转换成tm结构体;
    2)用mktime()函数把tm结构体转换成time_t时间;
    3)把time_t时间加30*60秒;
    4)用localtime_r()函数把time_t时间转换成tm结构体;
    5)把tm结构体转换成字符串。

六、程序睡眠

  • 如果需要把程序挂起一段时间,可以使用sleep()usleep()两个库函数。
  • 包含头文件:<unistd.h>
  • 函数声明:
    单位是秒:unsigned int sleep(unsigned int seconds);
    单位是微秒:int usleep(useconds_t usec);
  • 示例:
#include <iostream>
#include <cstring>
#include <unistd.h>
using namespace std;

int main()
{
    for (int i = 0; i < 10; i ++ )
    {
        sleep(1);
        cout << i << endl;
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值