当前位置: 首页 > news >正文

LINUXC 时间相关操作

文章目录

      • 时间戳
      • 获取本地时间
      • struct tm 结构体
      • 高精度的时间
      • struct timeval 结构体
      • 相关函数
        • time()
        • localtime()
        • gmtime()
        • gettimeofday()
        • strftime()
        • mktime()
      • 示例代码

时间戳

时间戳是指计算机中存储的数字型时间。它是以一个特定的时间点作为起点(通常是1970年1月1日0时0分0秒)开始,直到当前时间经过的秒数,即唯一标识了某一个时间的数字。时间戳也被称为日历时间,在linux系统中时间戳是一个long int 类型,可以用time函数获取。

获取本地时间

通过使用 localtime() 函数,可以将时间戳(秒数)转换为 struct tm 结构体,对应本地时区。
通过使用gmtime() 函数,可以将时间戳(秒数)转换为 struct tm 结构体,对应格林尼治标准时间(GMT)。

struct tm 结构体

struct tm {int tm_sec;   // 秒,范围从 0 到 59int tm_min;   // 分,范围从 0 到 59int tm_hour;  // 时,范围从 0 到 23int tm_mday;  // 一个月中的日,范围从 1 到 31int tm_mon;   // 月份,范围从 0 到 11int tm_year;  // 年份,从 1900 开始int tm_wday;  // 一周中的日,范围从 0 (周日) 到 6 (周六)int tm_yday;  // 一年中的日,范围从 0 到 365int tm_isdst; // 夏令时标识
};

**注意:**在struct tm 中 年份的表示是从1900年开始到现在的年份的个数,使用时需要加1900,才能表示现在的年份。

高精度的时间

通过time函数的得到的时间戳只能精确到秒级别,想要获取高精度时间达到微妙级别需要使用函数 gettimeofday 和结构体struct timeval。

struct timeval 结构体

struct timeval {time_t      tv_sec;     /* seconds */suseconds_t tv_usec;    /* microseconds */
};

相关函数

time()
#include <time.h>
time_t time(time_t *tloc);

Linux下可以使用time()来查看当前时间,这个函数会计算从1970年1月1号00:00(UTC)到当前的时间跨度。秒级别。

localtime()
struct tm *localtime(const time_t *timep);

将时间戳转化为本地时间

gmtime()
struct tm *gmtime(const time_t *timep);

将时间戳转化为格林尼治标准时间。

gettimeofday()
#include <sys/time.h>// 调用成功返回0,失败返回-1
int gettimeofday(struct timeval *tv, struct timezone *tz);

Linux下可以使用gettimeofday()来查看当前时间,这个函数会计算从1970年1月1号00:00(UTC)到当前的时间跨度。该函数所算出的时间跨度会存放在第一个参数tv里。时间跨度可以精确到微妙,time_t和suseconds_t的实际类型是long int。日常使用时,只需传第一个参数,第二个参数传NULL(因为linux内核不会使用这个参数)

strftime()
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

将struct tm 转化为格式化字符串。

mktime()
time_t mktime(struct tm *tm);

所指向的结构转换为自 1970 年 1 月 1 日以来持续时间的秒数,发生错误时返回-1。

示例代码

改代码实现一部分ls命令的功能,会用到时间的转换

getstatus.c

#include "getstatus.h"
#include <bits/types/time_t.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <pwd.h>
#include <grp.h>
#include <time.h>
#define FILE_TYPE_MASK 0xF000typedef unsigned int u32;char file_type[7]={'p','c','d','b','-','l','s'};
char file_wr[][4]={"---\0","--x\0","-w-\0","-wx\0","r--\0","r-x\0","rw-\0","rwx\0"};int show_time(time_t time)
{time_t t = time;struct tm * p = localtime(&t);int year = p->tm_year + 1900;int month = p->tm_mon + 1;int day = p->tm_mday;int h = p->tm_hour;int m = p->tm_min;int s = p->tm_sec;printf("%02d月 %02d %04d %02d:%02d ",month,day,year,h,m);return 0;}void get_filestatus(struct stat * status)
{u32 information = status->st_mode;//获取文件类型int tmp = ((information & FILE_TYPE_MASK)>>12)/2;printf("%c",file_type[tmp]);//所有者权限tmp = (information & 0x01c0)>>6;printf("%s",file_wr[tmp]);//所有组权限tmp = (information & 0x0038)>>3;printf("%s",file_wr[tmp]);//othertmp = (information & 0x0007);printf("%s",file_wr[tmp]);printf(" %ld ",status->st_nlink);//获取user namestruct passwd * pwd = getpwuid(status->st_uid);printf(" %s ",pwd->pw_name);struct group * gwd = getgrgid(status->st_gid);printf(" %s ",gwd->gr_name);printf(" %6ld ",status->st_size);show_time(status->st_atim.tv_sec);}

getstatus.h

#ifndef __GETSTATUS_H
#define __GETSTATUS_H#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>void get_filestatus(struct stat *status);#endif

main.c

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "getstatus.h"
int main(int argc, char **argv)
{struct stat st;if (argc < 2){printf("use: command filename1 filename2 ...\n");exit(-1);}for(int i=1;i<argc;i++){stat(argv[i], &st);get_filestatus(&st);printf("%s \n",argv[i]);}while(1){}}

效果

wangju@wangju-virtual-machine:~/learn/filestatus$ ls | xargs -i ./myls {}
-rw-rw-r-- 1  wangju  wangju    1491 01月 03 2025 14:33 getstatus.c 
-rw-rw-r-- 1  wangju  wangju     176 01月 03 2025 15:01 getstatus.h 
-rw-rw-r-- 1  wangju  wangju     478 01月 03 2025 14:33 main.c 
-rwxrwxr-x 1  wangju  wangju   17376 01月 03 2025 15:02 myls 
-rwxrwxr-x 1  wangju  wangju   17376 1227 2024 14:17 t 
drwxrwxr-x 2  wangju  wangju    4096 1226 2024 19:40 test 
wangju@wangju-virtual-machine:~/learn/filestatus$ ll
总用量 64
drwxrwxr-x  3 wangju wangju  4096 13 15:01 ./
drwxrwxr-x 11 wangju wangju  4096 12 14:50 ../
-rw-rw-r--  1 wangju wangju  1491 1226 19:38 getstatus.c
-rw-rw-r--  1 wangju wangju   176 13 15:00 getstatus.h
-rw-rw-r--  1 wangju wangju   478 1227 14:17 main.c
-rwxrwxr-x  1 wangju wangju 17376 1226 19:38 myls*
-rwxrwxr-x  1 wangju wangju 17376 1227 14:17 t*
drwxrwxr-x  2 wangju wangju  4096 1226 18:57 test/

相关文章:

LINUXC 时间相关操作

文章目录 时间戳获取本地时间struct tm 结构体高精度的时间struct timeval 结构体相关函数time()localtime()gmtime()gettimeofday()strftime()mktime() 示例代码 时间戳 时间戳是指计算机中存储的数字型时间。它是以一个特定的时间点作为起点&#xff08;通常是1970年1月1日0…...

网络游戏之害

网络游戏之害&#xff1a; 网络游戏于今之世风靡四方&#xff0c;其娱人耳目、畅人心怀之效&#xff0c;固为人知&#xff0c;然所藏之害&#xff0c;若隐伏之暗潮&#xff0c;汹涌而至时&#xff0c;足以覆舟&#xff0c;尤以青年为甚&#xff0c;今且缕析其害&#xff0c;以…...

SpringMVC的消息转换器

SpringMVC的消息转换器&#xff08;Message Converter&#xff09;是Spring框架中用于处理HTTP请求和响应体与Java对象之间转换的组件。它们使得开发人员可以轻松地将HTTP请求的数据映射到方法参数&#xff0c;并将返回的对象转换为HTTP响应。 工作原理 当一个HTTP请求到达Spr…...

Chrome 浏览器下载安装教程,保姆级教程

大家好&#xff0c;今天我们来聊一聊如何在国内下载和安装最新版本的 Chrome 浏览器。由于众所周知的原因&#xff0c;Google 的网站在国内是被屏蔽的&#xff0c;因此很多朋友在下载 Chrome 浏览器 时会遇到困难。其实&#xff0c;不必担心&#xff0c;今天我将为大家带来一份…...

ElasticSearch系列(一)

一.了解ES、倒排索引、es的一些概念、安装es、kibana 二.DSL&#xff1b;索引库操作 三.Java RestClient&#xff1a;索引库操作 一、了解ES、倒排索引、es的一些概念、安装es、kibana kibana、logstash、beats Elasticserach 存储&#xff0c;计算 &#xff0c;搜索数据 –…...

C++技巧:map和vector

一&#xff0c;map是有序的&#xff0c;unordered_map是无序的 在C中&#xff0c;std::map 和 std::unordered_map 是两种不同的容器&#xff0c;它们都用于存储键值对&#xff0c;但是它们的底层实现和性能特性有所不同。以下是它们的详细介绍&#xff1a; std::map std::m…...

中建海龙:科技助力福城南产业片区绿色建筑发展

在快速发展的城市化进程中&#xff0c;绿色建筑以其环保、节能、可持续的特点日益受到重视。作为建筑工业化领域的领军企业&#xff0c;中建海龙科技有限公司&#xff08;简称“中建海龙”&#xff09;凭借其卓越的科技实力和创新举措&#xff0c;在推动绿色建筑发展方面做出了…...

模块化通讯管理机在物联网系统中的应用

安科瑞刘鸿鹏 摘要 随着能源结构转型和智能化电网的推进&#xff0c;电力物联网逐渐成为智能电网的重要组成部分。本文以安科瑞ANet系列智能通信管理机为例&#xff0c;探讨其在电力物联网中的应用&#xff0c;包括数据采集、规约转换、边缘计算、远程控制等技术实践&#…...

建立一个Macos载入image的实例含界面

前言 为了方便ios程序的开发&#xff0c;有时候需要先用的Macos平台进行一些功能性的程序开发。 作为对比和参考。 1、创建一个MacOS的App 2、主界面控件的增加 添加的控件方法与ios相同&#xff0c;也是再用commandshiftL&#xff08;CtrlShiftL&#xff09;,就会弹出控件…...

Redis List列表

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Redis List列表 收录于专栏[redis] 本专栏旨在分享学习Redis的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 概述 常用命令 LPUSH …...

继承与多态 - 继承机制、虚函数、纯虚函数

引言 C 是一种支持面向对象编程&#xff08;OOP&#xff09;的编程语言&#xff0c;继承和多态是 OOP 的两个核心概念。通过继承&#xff0c;我们可以创建新的类&#xff0c;这些新类可以重用现有类的代码&#xff0c;并且可以根据需要进行扩展或修改。多态则允许我们编写更加…...

【QT】C++线程安全的单例模板

模板代码 #pragma once #include <mutex> #include <atomic>// CRTP基类模板 Curiously Recurring Template Parttern—奇异递归模板模式。 template <typename T> class SingletonCRTP { public:// 禁止拷贝构造和赋值操作SingletonCRTP(const SingletonCR…...

node.js内置模块之---EventEmitter 类

EventEmitter 类什么作用 EventEmitter 类的主要方法 EventEmitter 类什么作用 在 Node.js 中&#xff0c;EventEmitter 是一个非常核心的类&#xff0c;它提供了一种事件驱动的机制。几乎所有的 Node.js 核心模块&#xff08;如 fs, http, net 等&#xff09;都采用了事件驱…...

SWM221系列芯片之电机应用及控制

经过对SWM221系列的强大性能及外设资源&#xff0c;TFTLCD彩屏显示及控制进行了整体介绍后&#xff0c;新迎来我们的电控篇---SWM221系列芯片之电机应用及控制。在微控制器市场面临性能、集成度与成本挑战的当下&#xff0c;SWM221系列芯片以其卓越性能与创新设计&#xff0c;受…...

单片机-静动态数码管实验

P0控制数码管 &#xff0c;P0低电平 P1,P2,P3高电平 1、静态数码管 需求&#xff1a;数码管显示0&#xff0c;即让p0端口输出数字0的段码0x3f(共阴) #include "reg52.h" typedef unsigned int u16; typedef unsigned char u8; //数码管显示数字的数组 共阴极 …...

Fabric环境部署

官方下载文档&#xff1a;A Blockchain Platform for the Enterprise — Hyperledger Fabric Docs main documentation 1.1 创建工作目录 将Fabric代码按照GO语言的推荐方式进行存放&#xff0c;创建目录结构并切换到该目录下。具体命令如下&#xff1a; mkdir -p ~/go/src/g…...

VisualRules规则引擎语法介绍

VisualRules规则引擎是一款用于处理复杂业务规则的引擎&#xff0c;广泛应用于金融、保险、医疗等领域。它通过将业务逻辑从代码中分离出来&#xff0c;以可配置的方式管理和执行规则。以下是VisualRules规则引擎的基本语法和使用方法&#xff1a; 1. 规则定义 规则通常由 条件…...

enzymejest TDD与BDD开发实战

一、前端自动化测试需要测什么 1. 函数的执行逻辑&#xff0c;对于给定的输入&#xff0c;输出是否符合预期。 2. 用户行为的响应逻辑。 - 对于单元测试而言&#xff0c;测试粒度较细&#xff0c;需要测试内部状态的变更与相应函数是否成功被调用。 - 对于集成测试而言&a…...

Statistic for ML

statistical concept 統計學概念 免費完整內容 PMF and CDF PMF定義的值是P(Xx)&#xff0c;而CDF定義的值是P(X < x)&#xff0c;x為所有的實數線上的點。 probability mass function (PMF) 概率質量函數 p X ( x ) P ( X x ) pX(x)P(Xx) pX(x)P(Xx) 是離散隨機變數…...

Django 中数据库迁移命令

在 Django 中&#xff0c;python manage.py makemigrations、python manage.py sqlmigrate polls 0003 和 python manage.py migrate 是与数据库迁移相关的重要命令。它们的作用和对应内容如下&#xff1a; 1. python manage.py makemigrations 功能: 此命令会根据你的模型文…...

【机器学习】 卷积神经网络 (CNN)

文章目录 1. 为什么需要 CNN2. CNN 的架构3. 卷积层4. 池化层5. CNN 的应用 1. 为什么需要 CNN 前提&#xff1a;利用前置知识&#xff0c;去掉全连接神经网络中的部分参数&#xff0c;提升学习效率。本质&#xff1a;在 DNN 之前加上 CNN&#xff0c;先去除不必要的参数&…...

Linux中操作中的无痕命令history技巧

当我们需要查看Linux下的操作记录时&#xff0c;就可以用history命令来查看历史记录 1、关闭history记录功能&#xff0c;如果不想让别人看到自己在Linux上的操作命令&#xff0c;可以用这个命令 set o history 2、打开history记录功能 set -o history3、清空记录 histor…...

在CE自动汇编里调用lua函数

CE自动汇编模板里有一个是调用lua函数&#xff0c;但是关于如何使用的资料很少&#xff0c;结果问AI也是各种错误回答&#xff0c;还各种误导... 下面是32位游戏的例子&#xff1a; loadlibrary(luaclient-i386.dll) luacall(openLuaServer(CELUASERVER))CELUA_ServerName: d…...

如何在没有 iCloud 的情况下将联系人从 iPhone 传输到 iPhone

概括 近期iOS 13.5的更新以及苹果公司发布的iPhone SE在众多iOS用户中引起了不小的轰动。此外&#xff0c;不少变化&#xff0c;如暴露通知 API、Face ID 增强功能以​​及其他在 COVID-19 期间与公共卫生相关的新功能&#xff0c;吸引了 iPhone 用户尝试新 iPhone 并更新到最…...

欧科云链研究院:ChatGPT 眼中的 Web3

编辑&#xff5c;OKG Research 转眼间&#xff0c;2024年已经进入尾声&#xff0c;Web3 行业经历了热闹非凡的一年。今年注定也是属于AI的重要一年&#xff0c;OKG Research 决定拉上 ChatGPT 这位“最懂归纳的AI拍档”&#xff0c;尝试把一整年的研究内容浓缩成精华。我们一共…...

行为模式2.命令模式------灯的开关

行为型模式 模板方法模式&#xff08;Template Method Pattern&#xff09;命令模式&#xff08;Command Pattern&#xff09;迭代器模式&#xff08;Iterator Pattern&#xff09;观察者模式&#xff08;Observer Pattern&#xff09;中介者模式&#xff08;Mediator Pattern…...

Kerberos用户认证-数据安全-简单了解-230403

hadoop安全模式官方文档&#xff1a;https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-common/SecureMode.html kerberos是什么 kerberos是计算机网络认证协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。 概念&#…...

【Multisim用74ls92和90做六十进制】2022-6-12

缘由Multisim如何用74ls92和90做六十进制-其他-CSDN问答 74LS92、74LS90参考...

滴滴工作流引擎Turbo与logicFlow研究

目录 logicFlow turbo 工作流引擎很多,也都提供了前端UI库,但是太过于冗杂了,元数据表都几十个,logincFlow和Turbo的组合提供了轻量化方式,turbo后端代码只有5个元数据表,logicFlow也提供了bpm的相关扩展功能,但缺点是turbo社区不活跃,logicFlow个人认为跟echarts这种…...

AE Pinnacle 10x6 kW DeviceNet MDXL User r Manual

AE Pinnacle 10x6 kW DeviceNet MDXL User r Manual...