Linux时间戳转换_时间戳转换软件

Linux时间戳转换_时间戳转换软件在大多数UNIX系统中,当前时间存储为自特定时刻以来经过的时间以简化,将时间保持为长整数。所有UNIX系统普遍接受的时刻是1970年1月1日凌晨12:00:00。这称为UNIX时间戳,并被所有现代UNIX/Linux系统识别。Linux时间戳date命令例如,如果我们希望找到2022年1月1日的UNIX时间戳,我们可以使用date命令。date尝试将字符串解析为格式化的日期和时间(或者,如果未指定时间戳,则假定时间为00:00AM),然后打印出给定

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在大多数 UNIX 系统中,当前时间存储为自特定时刻以来经过的时间以简化,将时间保持为长整数。所有 UNIX 系统普遍接受的时刻是 1970 年 1 月 1 日凌晨 12:00:00。 这称为 UNIX 时间戳,并被所有现代 UNIX/Linux 系统识别。

Linux 时间戳date命令

例如,如果我们希望找到 2022 年 1 月 1 日的 UNIX 时间戳,我们可以使用 date 命令。

在这里插入图片描述

在这里插入图片描述

date 尝试将字符串解析为格式化的日期和时间(或者,如果未指定时间戳,则假定时间为 00:00 AM),然后打印出给定日期和/或时间的 UNIX 时间戳形式。 1640966400 是自 1970 年 1 月 1 日凌晨 00:00:00 以来经过的确切秒数。

反过来也是可能的,我们采用 UNIX 时间戳并将其转换为日期表示。 为了取回我们的原始日期,我们可以传递如图所示的 UNIX 时间戳来转换它。

在这里插入图片描述

什么是UTC、GMT、夏令时

UTC

整个地球分为二十四时区,每个时区都有自己的本地时间。在国际上,为了统一起见,我们使用一个统一的时间,称为通用协调时(UTC,Universal Time Coordinated)。

GMT

GMT(Greenwich Mean Time), 格林威治平时(也称格林威治时间)。
它规定太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间为中午12点。

夏令时

DST(Daylight Saving Time),夏令时又称夏季时间,或者夏时制。它是为节约能源而人为规定地方时间的制度。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。

Linux下时间戳转换工具使用的时间函数

ctime()、gmtime() 和 localtime() 函数都采用数据类型 time_t 的参数,它表示日历时间。 当解释为绝对时间值时,它表示自 Epoch 1970-01-01 00:00:00 +0000 (UTC) 以来经过的秒数。asctime() 和 mktime() 函数都接受一个参数来表示分解的时间,该参数表示分解为年、月、日等。

在 <time.h> 中定义的结构 tm 中,如下所示:

struct tm { 
   
   int tm_sec;         /* seconds */
   int tm_min;         /* minutes */
   int tm_hour;        /* hours */
   int tm_mday;        /* day of the month */
   int tm_mon;         /* month */
   int tm_year;        /* year */
   int tm_wday;        /* day of the week */
   int tm_yday;        /* day in the year */
   int tm_isdst;       /* daylight saving time */
};

tm结构的成员是:

tm_sec 分钟后的秒数,通常在 0 到 59 的范围内,但可以最大为 60 以允许闰秒。
tm_min 小时后的分钟数,范围为 0 到 59。
tm_hour 午夜过后的小时数,范围为 0 到 23。
tm_mday 月份中的某一天,范围为 1 到 31。
tm_mon 自一月以来的月数,范围为 0 到 11。
tm_year 自 1900 年以来的年数。
tm_wday 自星期日以来的天数,范围为 0 到 6。
tm_yday 自 1 月 1 日以来的天数,范围为 0 到 365。
tm_isdst 指示夏令时在所述时间是否有效的标志。 如果夏令时有效,则值为正,否则为零,
如果信息不可用,则为否定。

gmtime()

gmtime() 函数将日历时间 timep 转换为分解的时间表示,以协调世界时 (UTC) 表示。当年份确实时,它可能会返回 NULL不适合整数。返回值指向一个静态分配的结构,随后调用任何日期和时间函数可能会覆盖该结构。

localtime()

localtime() 函数将日历时间 timep 转换为分解的时间表示,表示相对于用户指定的时区。该函数的作用就像调用 tzset(3)并设置外部变量 tzname 与有关当前时区的信息,时区与协调世界时 (UTC) 和本地之间的差异以秒为单位的标准时间,如果夏令时规则在一年中的某些时间适用,则将日光设置为非零值。返回值指向一个静态分配的可能被后续调用任何日期和时间函数覆盖的结构。

mktime()

mktime() 函数将分解的时间结构(表示为本地时间)转换为日历时间表示。该函数忽略调用者提供的值 tm_wday 和 tm_yday 字段。 tm_isdst 字段中指定的值通知 mktime() 夏令时 (DST) 在 tm中提供的时间是否有效结构:正值表示夏令时生效;零表示 DST 无效;负值意味着 mktime() 应该(使用时区信息和系统数据库)尝试确定 DST 是否在指定时间生效。

strftime()

函数根据格式规范 format 格式化分解时间 tm,并将结果放入大小为 max 的字符数组 s 中。格式规范是一个以 null 结尾的字符串,可能包含称为转换规范的特殊字符序列,每个都由一个 ‘%’ 字符引入并由称为转换说明符字符的其他字符终止。所有其他字符序列都是普通字符序列。

普通字符序列的字符(包括空字节)从format逐字复制到s。 但是,转换规范的字符被替换如下:

%A 根据当前语言环境的完整工作日名称。

%b 根据当前语言环境的缩写月份名称。

%B 根据当前语言环境的完整月份名称。

%c 当前语言环境的首选日期和时间表示。

%C 世纪数(年/100)为 2 位整数。 ()

%d 以十进制数表示的月份中的日期(范围 0131)。

%D 相当于 %m/%d/%y。 (Yecch — 仅适用于美国人。美国人应该注意,在其他国家/地区 %d/%m/%y 相当普遍。这意味着在国际背景下,这
	  格式不明确,不应使用。)(SU)

%e 与 %d 一样,月份中的日期为十进制数,但前导零被空格替换。 ()

%E 修饰符:使用替代格式,见下文。 ()

%F 等效于 %Y-%m-%d(ISO 8601 日期格式)。 (C99)

%G 基于 ISO 8601 周的年份(参见注释),世纪为十进制数。对应于 ISO 周数的 4 位数年份(请参阅 %V)。这具有相同的格式和
	  值作为 %Y,但如果 ISO 周数属于上一年或下一年,则使用该年代替。 (TZ)

%g 与 %G 类似,但没有世纪,即带有 2 位数字的年份 (00-99)(TZ)

%h 相当于 %b。 ()

%H 使用 24 小时制(范围 0023)的十进制数字形式的小时。

%I 使用 12 小时制的十进制数字形式的小时(范围 0112)。

%j 以十进制数表示的一年中的日期(范围 001366)。

%k 小时(24 小时制),十进制数(范围 023);单个数字前面有一个空格。 (另见 %H。) (TZ)

%l 小时(12 小时制),十进制数(范围 112);单个数字前面有一个空格。 (另见 %I。) (TZ)

%m 十进制数形式的月份(范围 0112)。

%M 十进制数形式的分钟(范围 0059)。

%n 换行符。 ()

%O 修饰符:使用替代格式,见下文。 ()

%p 根据给定时间值的“AM”或“PM”,或当前语言环境的相应字符串。中午被视为“PM”,午夜被视为“AM”。

%P 与 %p 类似,但小写:“am”或“pm”或当前语言环境的相应字符串。 (GNU)

%r 上午或下午的时间符号。在 POSIX 语言环境中,这相当于 %I:%M:%S %p。 ()

%R 24 小时制的时间 (%H:%M)(SU) 有关包含秒数的版本,请参阅下面的 %T。

%s 自纪元 1970-01-01 00:00:00 +0000 (UTC) 以来的秒数。 (TZ)

%S 秒为十进制数(范围 0060)。 (范围最大为 60 以允许偶尔的闰秒。)

%t 制表符。 ()

%T 24 小时制的时间 (%H:%M:%S)()

%u 以十进制表示的星期几,范围为 17,星期一为 1。另见 %w。 ()

%U 以十进制数表示的当前年份的周数,范围为 0053,从第一个星期日开始作为第 01 周的第一天。另见 %V 和 %W。

%V 当前年份的 ISO 8601 周数(见注释),十进制数,范围 0153,其中第 1 周是新年中至少有 4 天的第一周。看
	  还有 %U 和 %W。 ()

%w 以十进制表示的星期几,范围为 06,星期日为 0。另见 %u。

%W 当前年份的周数,十进制数,范围 0053,从第一个星期一开始作为第 01 周的第一天。

%x 当前区域设置的首选日期表示,不包含时间。

%X 不带日期的当前语言环境的首选时间表示。

%y 没有世纪的十进制数字形式的年份(范围 0099)。

%Y 十进制数字形式的年份,包括世纪。

%z +hhmm 或 -hhmm 数字时区(即与 UTC 的小时和分钟偏移量)。 ()

%Z 时区名称或缩写。

%+ date(1) 格式的日期和时间。 (TZ)(在 glibc2 中不支持。)

%% 文字 '%' 字符。

Linux C/C++ 时间戳转换工具实现

int main(int argc, char** argv) 
{ 
   
	
	if(argc > 1) 
	{ 
   
		
		// 帮助消息
		if(!strcmp(argv[1], "-help") || !strcmp(argv[1], "--help") || !strcmp(argv[1], "-h")) 
		{ 
   
			setShow("\nUsage:\n");
			printf(" %s 1656214921 -g ---> 2022-06-26/11:42:01\n %s 2022-06-26/11:42:01 -s ---> 1656214921\n", ORIGINAL_FILENAME, ORIGINAL_FILENAME);
			setShow("\nFlags:\n");
			printf(" -g : Display GMT time\n -s : DST on, summer time\n -w : DST off, winter time\n");
			printf("\nBy default DST is off and the local time is used (GMT off)\n");
			return 0;
		}
		
		const int inlen = strlen(argv[1]);
		int starg = 1;
		
		// 检查用户输入
		if(inlen == len_date || inlen == len_unix_ms || inlen == len_unix) 
		{ 
   
			
			if(valid(argv[1], inlen)) 
			{ 
   
				
				if(inlen == len_date) 
				{ 
   
					strncpy(userInput, argv[1], len_date);
					userInputType = inpTypeDate;
				} 
				else 
				{ 
   
					strncpy(userInput, argv[1], len_unix);
					userInputType = inpTypeUnix;
				}
				
				starg = 2;
			}
			else 
			{ 
   
				printf("Is your input a valid date-time?\n");
				printf("Run %s -help for more\n", ORIGINAL_FILENAME);
				return 0;
			}
		}
		
		// 检查参数
		for(i = starg; i < argc; i++) 
		{ 
   
			
			if(!strcmp(argv[i], "-s")) 
			{ 
   
				is_dst = 1;
			}
			else if(!strcmp(argv[i], "-w")) 
			{ 
   
				is_dst = 0;
			}
			else if(!strcmp(argv[i], "-g")) 
			{ 
   
				is_gmt = true;
			}
		}
		
	}
 ...
}	

运行:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结

Linux 时间戳包含一个数字而不是日期和时间。 此数字是自 1970 年 1 月 1 日午夜 (00:00:00) 的 Unix 纪元以来的秒数,采用协调世界时 (UTC)。 闰秒在 Linux 时间戳中被忽略,因此它们与实时不同,这里,文中的时间函数参考man手册。

欢迎关注微信公众号【程序猿编码】,需要时间戳转换工具完整源码的添加本人微信号(c17865354792)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186795.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java线程(二):线程同步synchronized和volatile

    Java线程(二):线程同步synchronized和volatile要说明线程同步问题首先要说明Java线程的两个特性,可见性和有序性。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现。拿上篇博文中的例子来说明,在多个线程之间共享了Count类的一个对象,这个对象是被创建在主内存(堆内存)中,每个线程都有自己的工作内存(线程栈),工作内存存储了主内存Count对象的一个副本,当线程操作Count对象时,首先从主内存复制Co…

  • 数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS「建议收藏」

    数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS「建议收藏」@TOC数据流向应用示例何为数仓DWDatawarehouse(可简写为DW或者DWH)数据仓库,是在数据库已经大量存在的情况下,它是一整套包括了etl、调度、建模在内的完整的理论体系。数据仓库的方案建设的目的,是为前端查询和分析作为基础,主要应用于OLAP(on-lineAnalyticalProcessing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。目前行业比较流行的有:AWSRedshift,Greenplum,Hive等。数据仓库并不是数据的最终目的地

  • 2021年河北高考成绩位次怎么查询,2021年河北高考一分一段表查询排名方法 成绩排名位次什么时候公布…

    2021年河北高考成绩位次怎么查询,2021年河北高考一分一段表查询排名方法 成绩排名位次什么时候公布…河北高考填报志愿最关键的第一步,就是在河北高考一分一段表查询排名方法考生要在“一分一段表”中查找与自己成绩相对应的分数排名,以及这一位次的成绩共有多少考生,以此来确定个人成绩在全省的位置。同时查一下自己的目标院校在往年的录取线是多少,该院校的录取线在当年“一份一段表”中的位置再查一下该院校在当年的招生人数,参照今年的招生计划人数,综合判断自己今年的位置是否能够被目标院校录取。河北高考成绩排名位次一…

  • JAVA学习–getInstance「建议收藏」

    JAVA学习–getInstancepublicstaticDBConnectinstance; publicstaticDBConnectgetInstance(){ if(instance==null){  instance=newDBconnect(); } returninstance;…

  • oracle替换指定字符串_字符串的替换函数

    oracle替换指定字符串_字符串的替换函数REPLACE()用法:replace(原字段,“原字段旧内容“,“原字段新内容“,)例如:SELECTREPLACE(‘abcde’,’a’,NULL)ASstrFROMdual;–bcde

  • Windows内核开发-3-内核编程基础

    Windows内核开发-3-内核编程基础Windows内核开发-3-内核编程基础这里会深入讲解kernel内核的API、结构体、和一些定义。考察代码在内核驱动中运行的机制。最后把所有知识合在一起写一个有用的驱动。本章学习要点:1:通用

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号