Linux下获取当前时间到1970年之前某年份的秒数的C代码实现
2015-05-19 18:42
627 查看
一、问题描述
在Linux下编写一C程序,用于获取当前时间到1970年之前某年份的秒数。
二、C代码实现
三、makefile文件内容
四、程序说明
(1) 在Linux下,有一个函数time用户获取时间,但时间的起点是从1970年开始的,因此本程序获取的时间分为两段:输入时间到1970年的时间和1970年到当前的时间。输入时间到1970年的时间用自编的函数获取,1970年到当前的时间用time(0)获取。
(2) 打印获取到的秒数的时候,要用“%u”格式;如果采用“%d”格式,则会出现整型值溢出的情况,打印出负值。
五、程序运行结果
运行“make”命令之后,转到“release”目录下,执行“GetSecNumBetweenTwoYear”,结果如下:
(1) 正常用例
(2) 异常用例
本人微信公众号:zhouzxi,请扫描以下二维码:
在Linux下编写一C程序,用于获取当前时间到1970年之前某年份的秒数。
二、C代码实现
/********************************************************************* * 版权所有 (C)2015, Zhou Zhaoxiong。 * * 文件名称:GetSecNumBetweenTwoYear.c * 文件标识:无 * 内容摘要:获取当前时间到1970年之前某时间的秒数 * 其它说明:无 * 当前版本:V1.0 * 作 者:Zhou Zhaoxiong * 完成日期:20150211 * *********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef unsigned short int UINT16; typedef signed int INT32; typedef unsigned int UINT32; UINT32 GetSecNumBetweenTwoYear(UINT16 iFirstYear, UINT16 iSecondYear); INT32 main(); /********************************************************************* * 功能描述:主函数 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20150211 V1.0 Zhou Zhaoxiong 创建 *********************************************************************/ INT32 main() { UINT32 iYearBefore1970 = 0; UINT32 iSecondsTo1970 = 0; UINT32 iTotalSeconds = 0; // 先输入一个1970年之前的年份 printf("Please input a year before 1970: \n"); scanf("%d", &iYearBefore1970); if (iYearBefore1970 >= 1970) // 确保输入时间小于1970 { printf("The year %d isn't less than 1970, please check!\n", iYearBefore1970); return -1; } // 计算输入年份到1970年的秒数 iSecondsTo1970 = GetSecNumBetweenTwoYear(iYearBefore1970, 1970); printf("The total seconds from %d to 1970 is: %u\n", iYearBefore1970, iSecondsTo1970); // 计算总的秒数 iTotalSeconds = (UINT32)(time(0) + (time_t)iSecondsTo1970); printf("The total seconds from %d to now is: %u\n", iYearBefore1970, iTotalSeconds); return 0; // main函数返回0 } /********************************************************************** * 功能描述: 计算任意两年之间的秒数 * 输入参数: iFirstYear-减数 iSecondYear-被减数 * 输出参数: 无 * 返 回 值: 秒数 * 其它说明: 无 * 修改日期 版本号 修改人 修改内容 * -------------------------------------------------------------------- * 20150211 V1.0 Zhou Zhaoxiong 创建 *********************************************************************/ UINT32 GetSecNumBetweenTwoYear(UINT16 iFirstYear, UINT16 iSecondYear) { UINT32 iTotalDays = 0; // 两年之间的总天数 UINT16 iTmpYear = 0; // 用作临时存放中间数据 // 输入参数检查, 保证减数小于被减数 if (iFirstYear > iSecondYear) { iTmpYear = iFirstYear; iFirstYear = iSecondYear; iSecondYear = iTmpYear; } // 计算总天数 iTotalDays = 0; for (iTmpYear = iFirstYear; iTmpYear < iSecondYear; iTmpYear ++) { // 判断该年天数:1-能被4整除,但不能被100整除的是闰年; 2-能被400整除的是闰年 if ((0 == (iTmpYear%4) && 0 != (iTmpYear%100)) || 0 == (iTmpYear%400)) { iTotalDays += 366; // 闰年 } else { iTotalDays += 365; // 平年 } } return iTotalDays * 86400; // 总的秒数 }
三、makefile文件内容
GetSecNumBetweenTwoYear : GetSecNumBetweenTwoYear.c gcc -c -g GetSecNumBetweenTwoYear.c gcc -g -o release/GetSecNumBetweenTwoYear GetSecNumBetweenTwoYear.o rm *.o
四、程序说明
(1) 在Linux下,有一个函数time用户获取时间,但时间的起点是从1970年开始的,因此本程序获取的时间分为两段:输入时间到1970年的时间和1970年到当前的时间。输入时间到1970年的时间用自编的函数获取,1970年到当前的时间用time(0)获取。
(2) 打印获取到的秒数的时候,要用“%u”格式;如果采用“%d”格式,则会出现整型值溢出的情况,打印出负值。
五、程序运行结果
运行“make”命令之后,转到“release”目录下,执行“GetSecNumBetweenTwoYear”,结果如下:
(1) 正常用例
release> GetSecNumBetweenTwoYear Please input a year before 1970: 1900 The total seconds from 1900 to 1970 is: 2208988800 The total seconds from 1900 to now is: 3632613008 release> GetSecNumBetweenTwoYear Please input a year before 1970: 1910 The total seconds from 1910 to 1970 is: 1893456000 The total seconds from 1910 to now is: 3317080221
(2) 异常用例
release> GetSecNumBetweenTwoYear Please input a year before 1970: 1990 The year 1990 isn't less than 1970, please check!
本人微信公众号:zhouzxi,请扫描以下二维码:
相关文章推荐
- Js 获取当前日期时间及其它操作实现代码
- Js 获取当前日期时间及其它操作实现代码
- C语言实现获取LINUX当前时间
- C语言实现获取LINUX当前时间
- Linux下获取代码文件名、代码所在行数及日期时间的C程序实现
- Mac/IOS/linux获取当前时间包含微秒毫秒的代码
- c语言获取当前工作路径的实现代码(windows/linux)
- 获取当前时间的前后台实现代码比较java和js
- Linux下获取系统当前时间函数实现
- Linux 环境下C/C++获取系统时间 && 每隔500ms循环一次代码实现
- java获取当前时间和前一天日期(实现代码)
- Js 获取当前日期时间及其它操作实现代码
- python简单实现获取当前时间
- Linux 下c获取当前时间(精确到秒和毫秒或者微秒)
- JavaScript 实现获取当前时间
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
- Golang获取当前时间代码
- JAVA 获取系统当前时间实例代码
- java 获取当前函数名的实现代码