C语言 日期转时间戳

article/2025/9/1 22:50:53

C语言 日期转时间戳

    • 废话先说
      • 啥时候开始数?
      • 站在2022的肩膀上!
      • 一年能“嘀嗒”多少下?
      • 言归正传

废话先说

关于用C实现日期转时间戳,面对这样一个很基础的功能,作为一个小白白当然是,先百度,再看CSDN,最后再去知乎逛,看看有没有现成的代码,就拿过来跑一跑,能省很多事,,,,,
本着省事的目的,就找呀,复制过来,测试,找了半天,没有一个能用的,得不偿失了,很烦。。。
那就自己动手吧!

啥时候开始数?

说到时间戳,好像一般默认讲的都是UNIX时间戳,
百度和维基讲的都是,从1970年1月1日(UTC/GMT的午夜) 零点零分零秒 开始数秒!
关于有哥们问,为啥1970-01-01 08:00:00 转出来的 时间戳 是 0 呀 ?
UTC时间和北京时间 都去了解一下吧!
在这里插入图片描述

站在2022的肩膀上!

从1970-01-01 起开始数秒 感觉太遥远了
不妨从 2022-01-01 00:00:00 进行新的开始吧。

//定义一个起始时间戳 2022-01-01 00:00:00
#define  SPECIALTIMESTAMP       1640966400

过去的已经过去了,从今年开始数,数完了再加上 2022-01-01 00:00:00 这一刻的时间戳,不也就行了嘛

一年能“嘀嗒”多少下?

为此,定义了一些宏
平年一年365天,闰年一年366天!

#define  SECONDS_IN_A_MINUTE   60
#define  SECONDS_IN_AN_HOUR    60 * SECONDS_IN_A_MINUTE
#define  SECONDS_IN_A_DAY      24 * SECONDS_IN_AN_HOUR#define  SECONDS_IN_A_COMMON_YEAR   365 * SECONDS_IN_A_DAY
#define  SECONDS_IN_A_LEAP_YEAR     366 * SECONDS_IN_A_DAY

百度平年的时候,搜到了一个很难受的结果。。
在这里插入图片描述
再看看维基,又来了个公历。。。。
作为一个只关注礼拜天和节假日的小菜鸟,我吐了,#ucking#
在这里插入图片描述
简单说一下,
公历是阳历的一种,阳历还包括公历外的其他历法;
农历则是以阳历为主,以阴历为辅的一种方法,严格来讲叫阴阳历;
阳历,太阳历,是以地球围绕太阳公转一周的时间为一年而定的历法,就是阳历;
阴历,太阴历,是根据月球绕地球运行的周期而定的历法;

好吧,再简单一下:看图
在这里插入图片描述

言归正传

时间也不早了,日期转时间戳,没啥可说的,就是数数,直接上代码,

#include <stdio.h>typedef struct times
{int Year;int Mon;int Day;int Hour;int Min;int Second;
}Times;#define  SECONDS_IN_A_MINUTE   60
#define  SECONDS_IN_AN_HOUR    60 * SECONDS_IN_A_MINUTE
#define  SECONDS_IN_A_DAY      24 * SECONDS_IN_AN_HOUR#define  SECONDS_IN_A_COMMON_YEAR   365 * SECONDS_IN_A_DAY
#define  SECONDS_IN_A_LEAP_YEAR     366 * SECONDS_IN_A_DAY//从1970-01-01 08:00:00 起开始数秒
//定义一个起始时间戳 2022-01-01 00:00:00
#define  SPECIALTIMESTAMP       1640966400
typedef struct
{int Year;int Mon;int Day;int Hour;int Min;int Second;
}Date;Date specialTime = {2022,01,01,00,00,00
};
//31 : 1  3 5 7 8 10 12 ; 30 : 4 6 9 11
const int daysofmon[] ={0,31 * SECONDS_IN_A_DAY,(28 + 31) * SECONDS_IN_A_DAY,(31 + 28 + 31) * SECONDS_IN_A_DAY,(30 + 31 + 28 + 31 ) * SECONDS_IN_A_DAY,(31 + 30 + 31 + 28 + 31) * SECONDS_IN_A_DAY,(30 + 31 + 30 + 31 + 28 + 31) * SECONDS_IN_A_DAY,(31 + 30 + 31 + 30 + 31 + 28 + 31) * SECONDS_IN_A_DAY,(31 + 31 + 30 + 31 + 30 + 31 + 28 + 31) * SECONDS_IN_A_DAY,(30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31) * SECONDS_IN_A_DAY,(31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31) * SECONDS_IN_A_DAY,(30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 28 + 31) * SECONDS_IN_A_DAY};
const int _daysofmon[] ={0,31 * SECONDS_IN_A_DAY,(29 + 31) * SECONDS_IN_A_DAY,(31 + 29 + 31) * SECONDS_IN_A_DAY,(30 + 31 + 29 + 31 ) * SECONDS_IN_A_DAY,(31 + 30 + 31 + 29 + 31) * SECONDS_IN_A_DAY,(30 + 31 + 30 + 31 + 29 + 31) * SECONDS_IN_A_DAY,(31 + 30 + 31 + 30 + 31 + 29 + 31) * SECONDS_IN_A_DAY,(31 + 31 + 30 + 31 + 30 + 31 + 29 + 31) * SECONDS_IN_A_DAY,(30 + 31 + 31 + 30 + 31 + 30 + 31 + 29 + 31) * SECONDS_IN_A_DAY,(31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 29 + 31) * SECONDS_IN_A_DAY,(30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + 31 + 29 + 31) * SECONDS_IN_A_DAY
};
//日期转时间戳
size_t Date2timeStamp(Date standardTime){//需要计算 传进来的 standardTime 比 specialTime 大多少秒size_t differenceValue = 0;     //定义这个差值,单位为秒int leapYears = 0;if((standardTime.Year < specialTime.Year) || (standardTime.Year > 2099))//不允许 specialTime.Year 之前的时间传进来{printf("The year %d is not supported\r\n",standardTime.Year);return -1;}if((standardTime.Mon < 1) || (standardTime.Mon > 12))//不允许 无效的mon 传入{printf("The month %.2d is out of line\r\n",standardTime.Mon);return -1;}if((standardTime.Day < 1) || (standardTime.Day > 31))//不允许 无效的day 传入{printf("The day %.2d is out of line\r\n",standardTime.Day);return -1;}if((standardTime.Hour < 0) || (standardTime.Hour > 24))//不允许 无效的hour 传入{printf("The hour %.2d is out of line\r\n",standardTime.Hour);return -1;}if((standardTime.Min < 0) || (standardTime.Min > 59))//不允许 无效的min 传入{printf("The min %.2d is out of line\r\n",standardTime.Min);return -1;}if((standardTime.Second < 0) || (standardTime.Second > 59))//不允许 无效的sec 传入{printf("The sec %.2d is out of line\r\n",standardTime.Second);return -1;}//从 specialTime 开始,到 standardTime 的前一年之间有过少个闰年for(int i = specialTime.Year; i < standardTime.Year; i++){if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)){leapYears++;}}differenceValue += (SECONDS_IN_A_LEAP_YEAR * leapYears +SECONDS_IN_A_COMMON_YEAR * (standardTime.Year - specialTime.Year - leapYears));//判断 是不是闰年if((standardTime.Year % 4 == 0 && standardTime.Year % 100 != 0) || (standardTime.Year % 400 == 0))  {differenceValue += (_daysofmon[standardTime.Mon - 1] +(standardTime.Day - 1) * SECONDS_IN_A_DAY +(standardTime.Hour ) *  SECONDS_IN_AN_HOUR +(standardTime.Min ) * SECONDS_IN_A_MINUTE +standardTime.Second);}else{differenceValue += (daysofmon[standardTime.Mon - 1] +(standardTime.Day - 1) * SECONDS_IN_A_DAY +(standardTime.Hour) *  SECONDS_IN_AN_HOUR +(standardTime.Min) * SECONDS_IN_A_MINUTE +standardTime.Second);}return differenceValue += SPECIALTIMESTAMP;
}int main(){//2022-09-16 22:47:24   1663339644Date Time = {2022,9,		//不要填09和08,会判定成8进制17,0,8,8};printf("%lld\r\n",Date2timeStamp(Time));return 0;
}

简单测试过了,应该能用个几十年的。


http://chatgpt.dhexx.cn/article/XoR2rp45.shtml

相关文章

制作持久化U盘Kali 用U盘启动 使用fluxion破解WIFI密码(上)

这次文章包含两部分, 一部分是如何制作U盘KALI, 另一部分说明如何使用这新制作的U盘启动, 再使用fluxion 破解WIFI密码. 等以后有空写一份如何用airmon-ng来破WIFI密码吧. 本文针对有一定基础的初学者, 主要是说明有哪些坑要避开。因为装了几次发现太多坑了, 不想大家再走弯…

fluxion破解wifi

https://streamja.com/P30oE 上面有教程可以看一下&#xff0c;最近搞一个会爆炸的小玩意&#xff0c;如果搞成功了就可以理论上100%拿到wifi密码

使用aircrack和fluxion工具获取wifi密码的教程

首先&#xff0c;本教程仅供技术参考用&#xff0c;切勿非法获取他人wifi使用权&#xff01;&#xff01; 本教程在kali2020下使用&#xff0c;aircack与fluxion均使用&#xff08;2020.7.22&#xff09;最新版本。 有两个注意事项写在前面&#xff1a; 第一&#xff1a;flux…

Fluxion无线攻击

使用步骤 github地址 https://github.com/deltaxflux/fluxion 进入到fluxion目录下 ./fluxion 启动fluxion 启动之后会先检测没有安装的项&#xff0c;讲红色没有安装的 安装完 也许会到依赖项 问题 先看看你的源有没有问题&#xff0c;不行的话&#xff0c;就按提示 安装指定…

实战-Fluxion与wifi热点伪造、钓鱼、wifi破解

今天周末遇到了断网&#xff0c;听说是修路挖到了电缆&#xff0c;作为难得的周末没网是不能接受的&#xff0c;这时我看上了邻居家的WiFi&#xff0c;奈何又没密码&#xff0c;只能动手白嫖一下了。 现在的家用路由器支持WiFi一般是wpa/wpa2&#xff0c;没有连接密码我们能够做…

Fluxion 实战答疑

实战文章《实战-Fluxion与wifi热点伪造、钓鱼、中间人攻击、wifi破解》发布之后&#xff0c;大家响应热烈&#xff0c;不过也遇到了很多问题。微信后台被各种提问挤爆了&#xff0c;于是抓紧时间出了这篇答疑。 0x00-设置更新源 在apt-get install xxx前要记得更新源哦&#xf…

基于fluxion 6.9 钓鱼wifi

前言 本文章仅用来学习&#xff0c;切勿用于违法乱纪&#xff0c;出现问题后果自负。 利弊 利就是对于安全意识弱的很快知晓秘密&#xff0c;不用像跑字典一样那么久 弊就是对于安全意识高和有过类似操作经历的人容易被识破 下载安装&#xff0c;依赖配置 下载 git clone…

Fluxion钓鱼攻击

Fluxion简介 Fluxion是技术和社会工程学自动化的一个混合,它的特点在于诱骗用户自己输入并移交wifi密码。它是唯一一个通过使用WAP握手功能来控制登录页面的行为和控制整个脚本的行为的工具。它会阻塞原始网络并创建一个具有相同名称的克隆网络,引起断开连接后的用户加入。并…

第四篇 kali Linux 下安装fluxion

第四篇 kali Linux 下安装fluxion 第一篇kali linux 安装 https://blog.csdn.net/qq_43632394/article/details/109121233 第二篇 kali Linux换源 https://blog.csdn.net/qq_43632394/article/details/109128692 第三篇 kali Linux中文输入法 https://blog.csdn.net/qq_4363…

Fluxion安装教程

首先在终端执行&#xff1a;git clone https://gitee.com/youzicha123/fluxion.git 通过cd fluxion进入子目录 查看目录内容并安装./fluxion.sh 红色字体部分显示需要安装缺少的依赖包 ./fluxion.sh -i 按回车接着安装 安装结束后出现 在debian下载缺少的依赖包 在kali浏览…

fluxion5.9 踩坑

1.环境缺少pyrit 在linux安装pyrit_pinro的博客-CSDN博客_pyrit 安装# WPA/WPA2-PSK# Fluxion依赖网上给的apt资源好像都失效了,可以找个git资源安装1.下载python2及相关依赖apt-get install libpcap-devapt-get install python2.7-dev libssl-dev zlib1g-dev libpcap-dev2.从…

Fluxion

破解WiFi密码&#xff0c;除了Aircrack-ng的暴力跑字典外&#xff0c;还有一种新“姿势”&#xff0c;就是WiFi钓鱼&#xff0c;利用Fluxion可以很简单的实现。 首先下载fluxion&#xff1a;https://github.com/MuhammadOmar125/fluxion 下载之后解压运行&#xff0c;保证源正确…

利用fluxion进行WIFI钓鱼攻击的实验

#利用fluxion进行WIFI钓鱼攻击的实验 免责声明&#xff1a; 本博客旨在提供有关wifi钓鱼攻击的基本知识和防范方法&#xff0c;仅供参考和教育目的。本博客不鼓励或支持任何非法或不道德的网络活动&#xff0c;也不对任何因使用或滥用本博客中的信息而造成的损失或损害承担任何…

实例二——Fluxion-钓鱼破解WiFi笔记( 2.4GHz网络)

Fluxion-钓鱼破解WiFi&#xff08; 2.4GHz网络&#xff09; 1.安装fluxion 解压安装包&#xff0c;可以看见桌面上出现了fluxion-master&#xff0c;进入之后运行./fluxion.sh -i安装依赖包&#xff1b; 安装完成所有的依赖包 这里选17中文模式 然后选择1对2.4GHz进行抓包 可…

fluxion部分功能的使用

fluxion部分功能的使用 首先下载kali系统并进行fluxion的安装如果fluxion.sh显示有错误进入fluxion三次握手创建AP开启钓鱼等待用户往钓鱼页面输入密码找到路径查看密码 首先下载kali系统并进行fluxion的安装 git clone https://github.com/FluxionNetwork/fluxion.git等待几分…

使用fluxion制造伪wifi

免责声明&#xff1a;本文章所涉及内容仅可用于学习交流&#xff0c;请在合法授权下使用&#xff0c;严禁利用文中技术进行违法行为&#xff0c;否则后果自负&#xff01; 准备工作&#xff1a; 1.kali linux 2.软件fluxion 3.具有收发功能的wifi网卡 4.合法授权 原文链接…

使用Fluxion实现WiFi钓鱼

工具&#xff1a;无线网卡&#xff08;可监听&#xff09;、Fluxion、路由器&#xff08;演示中的为自家学校安全系实验室&#xff09; Fluxion介绍&#xff1a; Fluxion是从一个叫做Lindset的高级社会工程攻击演变而来&#xff0c;以欺骗无经验的用户泄露网络的密码的重写攻击…

kali利用fluxion无线网络钓鱼

kali利用fluxion无线网络钓鱼 看了网上所有关于fluxion的钓鱼使用教程都感觉不太全&#xff0c;本文本是整理为了自己复习学习&#xff0c;初学有问题还请大佬指示。 测试硬件&#xff1a; 笔记本电脑 无限外置网卡一张 &#xff08;两张网卡是必须的&#xff09; 软件&…

机器视觉_HALCON_快速向导_2.用HALCON开发程序

文章目录 使用HALCON开发应用程序1. 认识HALCON&#xff1a;架构&数据结构1.1. HALCON算子1.2. 参数与数据结构1.2.1. Images 图像1.2.2. Regions 区域1.2.3. XLDS 扩展线1.2.4. Handles 句柄1.2.5. Tuple Mode 元组模式 1.3. HALCON与并行编程⭐1.4. HALCON支持计算设备1.…

Halcon教程四:一个小技巧

不知道细心的小伙伴有没有发现 当我们去点击一个Halcon示例时 因为Halcon的示例都依赖于他的内置图片库 那么每一个程序前面都会出现 read_image(Image,path) 这一行函数 可以知道是获取一张图像的意思 但是如果我们需要自定义自己图片的路径 这个时候难道去 复制那张图片的路径…