


Does Linux have a function to calculate time?
Linux has functions for calculating time, such as: the function time() that can obtain the second-level time difference, the functions gettimeofday() and settimeofday() that can obtain the microsecond-level time difference, and the function that can obtain the nanosecond-level time difference. clock_gettime() and so on.
#The operating environment of this tutorial: linux7.3 system, Dell G3 computer.
The following explains the time-related functions and time-conversion-related functions in Linux
1. Obtain time-related functions
1.1 Get the second-level time difference function
#include <time.h> time_t time(time_t *timer);//通过函数返回值或者timer 变量均可以获取到当前时间
time_t is actually a long integer, representing UTC time (0:00:00 on January 1, 1970, Linux system The second-level time difference from Epoch time) to the current system time
1.2 Get the microsecond-level time difference function
#include <sys/time.h> #include <unistd.h> struct timeval { time_t tv_sec; /* seconds */ suseconds_t tv_usec; /* microseconds */ }; struct timezone{ int tz_minuteswest; /*miniutes west of Greenwich*/ int tz_dsttime; /*type of DST correction*/ }; //函数执行成功返回0,失败返回-1. 其中timezone 是时区相关的结构体 int gettimeofday(struct timeval *tv, struct timezone *tz); //用来设置制定的时间和时区信息 int settimeofday(const struct timeval *tv, const struct timezone *gz);
1.3 Get the nanosecond-level time difference function
#include <time.h> /* 其中clk_id 用来制定对应的时钟类型,不同的类型可以用来获取不同的时间值,具体有四种: CLOCK_REALTIME: 系统实时时间,从UTC开始计时,若时间被用户更改计数时间相应改变; CLOCK_MONOTONIC: 从系统启动开始计时,即使用户更改时间也没有影响; CLOCK_PROCESS_CPUTIME_ID: 本进程开始到执行到当前程序系统CPU花费的时间; CLOCK_THREAD_CPUTIME_ID: 本线程开始到执行到当前程序系统CPU花费的时间 */ struct timespec{ time_t tv_sec; //s long tv_nsec; //ns }; int clock_gettime(clockid_t clk_id, struct timespec* tp);
2. Convert time-related functions
2.1 Convert the time parameter time_t obtained by the above acquisition time function into a structure Body
struct tm, this structure contains very detailed fields such as year, month, day, etc. As shown below:
#include <time.h> struct tm{ int tm_sec; //秒 int tm_min; //分 int tm_hour; //时;取值区间为[0, 23] int tm_mday; //日;取值区间为[1, 31] int tm_mon; //月份;取值区间为[0, 11]; 0表示1月份依次递增到12月份 int tm_year; //年份;其值为1900年至今年数 int tm_wday; //星期;0代表星期天,1代表星期1,以此类推 int tm_yday; //日期;0代表1月1日 int tm_isdst; //夏令时标识符;使用夏令时为正,不使用t为0,不确定时为负*/ };
The commonly used functions to convert time_t into struct tm structure are as follows:
#include <time.h> struct tm* gmtime(const time_t* timep); struct tm*localtime(const time_t* timep);
gmtime() and localtime() functions can convert time_t data format into tm format type. The difference is that the result of the conversion by gmtime() is the information corresponding to GMT (central time zone), while the result of the conversion by the localtime() function is the information of the current time zone.
2.2 Convert time_t into the time and date strings we habitually use
The corresponding conversion function is as follows:
#include <time.h> char* ctime(time_t* timep);
2.3 The corresponding function to convert struct tm into time_t
is as follows:
#include <time.h> time_t mktime(struct tm *p_tm);
2.4 Convert struct tm into the time and date strings we habitually use
The corresponding functions are as follows:
#include <time.h> char *asctime(const struct tm *p_tm); //习惯性字符串 Thu Dec 9 07:13:35 2021
2.5 Convert the time string into struct tm format
/************************************** ** description: 将struct tm 按照指定的format格式转化成字符串 ** parameter: ** *s : 需要被转换的时间字符串 ** *format:时间字符串的格式 ** *tm:转换后的tm时间 **************************************/ char *strptime(const char *s, const char *format, struct tm *tm);
2.6 Convert struct tm into a string according to the specified format
/************************************** ** description: 将struct tm 按照指定的format格式转化成字符串 ** parameter: ** *s : 生成的时间字符串 ** max: 字符串最大字符数(即最大可生成的字符数量) ** *format:生成的字符串格式 ** *tm:需要被转换的tm时间 **************************************/ size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);
3. Example
#include <stdio.h> #include <string.h> #include <unistd.h> #include <time.h> #include <sys/time.h> int main(int argc, char *argv[]) { char *pstr = NULL; struct tm *ptm = NULL; printf("************** 使用ctime获取时间time_t **************\n"); time_t times = 0; time(×); printf("time_t:%ld\n\n", times); printf("************** 使用ctime转换time_t成我们习惯性使用的时间和日期字符串 **************\n"); pstr = ctime(×); printf("ctime:%s\n", pstr); printf("************** 使用gmtime转换time_t成struct tm 时间和日期**************\n"); ptm = gmtime(×); printf("time : %d:%d:%d\n", ptm->tm_hour, ptm->tm_min, ptm->tm_sec); printf("date: %d:%d:%d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday); printf("year: wday:%d yday:%d isdst:%d\n\n", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst); printf("************** 使用asctime转换struct tm成我们习惯性使用的时间和日期字符串**************\n"); pstr = asctime(ptm); printf("asctime:%s\n\n", pstr); printf("************** 使用localtime转换time_t成struct tm 时间和日期**************\n"); ptm = localtime(×); printf("time : %d:%d:%d\n", ptm->tm_hour, ptm->tm_min, ptm->tm_sec); printf("date: %d:%d:%d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday); printf("year: wday:%d yday:%d isdst:%d\n", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst); pstr = asctime(ptm); printf("asctime:%s\n\n", pstr); printf("************** 使用gettimeofday获取微秒级的时间**************\n"); struct timeval tv; struct timezone tz; gettimeofday(&tv, &tz); ptm = localtime(&tv.tv_sec); printf("time : %d:%d:%d\n", ptm->tm_hour, ptm->tm_min, ptm->tm_sec); printf("date: %d:%d:%d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday); printf("year: wday:%d yday:%d isdst:%d\n", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst); printf("tv_usec:%ld\n\n", tv.tv_usec); printf("************** 使用clock_gettime获取纳秒级的时间**************\n"); struct timespec tp; clock_gettime(CLOCK_REALTIME, &tp); ptm = localtime(&tp.tv_sec); printf("time : %d:%d:%d\n", ptm->tm_hour, ptm->tm_min, ptm->tm_sec); printf("date: %d:%d:%d\n", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday); printf("year: wday:%d yday:%d isdst:%d\n", ptm->tm_wday, ptm->tm_yday, ptm->tm_isdst); printf("tp.tv_nsec:%ld\n\n", tp.tv_nsec); return 0; }
Specific time character conversion
int str_to_time(void) { char pstr[128] = {0}; struct tm t; strptime("2021-04-23 12:34:56", "%Y-%m-%d %H:%M:%S", &t); printf("**** tm_isdst: %d, tm_yday:%d, tm_wday%d,\n %d-%d-%d \n %d:%d:%d\n", t.tm_isdst, t.tm_yday, t.tm_wday, t.tm_year+1900, t.tm_mon+1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec); printf("mktime ts:%ld\n", mktime(&t)); printf("asctime:%s\n", asctime(&t)); strftime(pstr, sizeof(pstr), "%Y-%m-%d %H:%M:%S", &t); printf("pstr:%s\n", pstr); } int time_to_str(void) { char pstr[128] = {0}; struct tm t = { .tm_sec = 56, /* Seconds (0-60) */ .tm_min = 34, /* Minutes (0-59) */ .tm_hour = 12, /* Hours (0-23) */ .tm_mday = 23, /* Day of the month (1-31) */ .tm_mon = 4-1, /* Month (0-11) */ .tm_year = 2021-1900, /* Year - 1900 */ .tm_wday = 5, /* Day of the week (0-6, Sunday = 0) */ .tm_yday = 113, /* Day in the year (0-365, 1 Jan = 0) */ .tm_isdst = 0, /* Daylight saving time */ }; strftime(pstr, sizeof(pstr), "%Y-%m-%d %H:%M:%S", &t); printf("pstr:%s\n", pstr); }
If you want to Get the time since system startup, even if the user changes the time, there will be no impact, in milliseconds, for example:
unsigned long long clock_systick_get(void) { int ret = -1; unsigned long long time; int cnt = 0; struct timespec now = {0, 0}; while (ret < 0 && cnt < 3) { ret = clock_gettime(CLOCK_MONOTONIC, &now); //获取失败重试,最大执行3次 cnt++; } time = now.tv_sec * 1000 + now.tv_nsec / (1000000); return time; }
Related recommendations: "Linux Video Tutorial"
The above is the detailed content of Does Linux have a function to calculate time?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

The reasons for the installation of VS Code extensions may be: network instability, insufficient permissions, system compatibility issues, VS Code version is too old, antivirus software or firewall interference. By checking network connections, permissions, log files, updating VS Code, disabling security software, and restarting VS Code or computers, you can gradually troubleshoot and resolve issues.

Although Notepad cannot run Java code directly, it can be achieved by using other tools: using the command line compiler (javac) to generate a bytecode file (filename.class). Use the Java interpreter (java) to interpret bytecode, execute the code, and output the result.

The five basic components of the Linux system are: 1. Kernel, 2. System library, 3. System utilities, 4. Graphical user interface, 5. Applications. The kernel manages hardware resources, the system library provides precompiled functions, system utilities are used for system management, the GUI provides visual interaction, and applications use these components to implement functions.

VS Code is available on Mac. It has powerful extensions, Git integration, terminal and debugger, and also offers a wealth of setup options. However, for particularly large projects or highly professional development, VS Code may have performance or functional limitations.

Visual Studio Code (VSCode) is a cross-platform, open source and free code editor developed by Microsoft. It is known for its lightweight, scalability and support for a wide range of programming languages. To install VSCode, please visit the official website to download and run the installer. When using VSCode, you can create new projects, edit code, debug code, navigate projects, expand VSCode, and manage settings. VSCode is available for Windows, macOS, and Linux, supports multiple programming languages and provides various extensions through Marketplace. Its advantages include lightweight, scalability, extensive language support, rich features and version

To view the Git repository address, perform the following steps: 1. Open the command line and navigate to the repository directory; 2. Run the "git remote -v" command; 3. View the repository name in the output and its corresponding address.

VS Code is the full name Visual Studio Code, which is a free and open source cross-platform code editor and development environment developed by Microsoft. It supports a wide range of programming languages and provides syntax highlighting, code automatic completion, code snippets and smart prompts to improve development efficiency. Through a rich extension ecosystem, users can add extensions to specific needs and languages, such as debuggers, code formatting tools, and Git integrations. VS Code also includes an intuitive debugger that helps quickly find and resolve bugs in your code.
