c语言怎么求两个日期相差的秒数,日期格式20140325150630和20140324150000

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言怎么求两个日期相差的秒数,日期格式20140325150630和20140324150000相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <time.h>

int main(void)

struct tm time_cha;
time_t t1,t2;
long int d;
int year, month, day,hour,min,sec;

scanf("%4d%2d%2d%2d%2d%2d",&year,&month,&day,&hour,&min,&sec);
time_cha.tm_year = year - 1900; //tm结构记录年为实际-1900
time_cha.tm_mon = month - 1;
time_cha.tm_mday = day;
time_cha.tm_hour = hour;
time_cha.tm_min = min;
time_cha.tm_sec = sec;
t1 = mktime(&time_cha);//获得从1970年1月1日0时0分0秒以来过去的时间,秒

scanf("%4d%2d%2d%2d%2d%2d",&year,&month,&day,&hour,&min,&sec);
time_cha.tm_year = year - 1900; //tm结构记录年为实际-1900
time_cha.tm_mon = month - 1;
time_cha.tm_mday = day;
time_cha.tm_hour = hour;
time_cha.tm_min = min;
time_cha.tm_sec = sec;
t2 = mktime(&time_cha);

d=t1-t2;//经过的时间差(秒)
printf("%ld\n", d);

return 0;
参考技术A 头文件
#include<time.h>

利用结构体tm

strcut tm tm1,tm2;
time_t timep1,timep2;

//先赋值20140325150630,注意下面减一的地方
tm1.tm_year=2014-1900;
tm1.tm_mon=3-1;
tm1.tm_mday=25;
tm1.tm_hour=15-1;
tm1.tm_min=6-1;
tm1.tm_sec=30-1;

tm2.....;

//转化为秒数

timep1=mktime(&tm1);
timep2=mktime(&tm2);

//减一下就是秒数差

timep2-timep1
参考技术B 例如 int m,m1,m2,s,s1,s2;
s=s2-s1;
if(s<0)s+=60;m--; //借位的处理

在linux bash中将ISO日期转换为纪元以来的秒数

【中文标题】在linux bash中将ISO日期转换为纪元以来的秒数【英文标题】:Convert an ISO date to seconds since epoch in linux bash 【发布时间】:2014-03-13 17:58:08 【问题描述】:

我有一个 ISO 格式 YYYY-MM-DDTHH:SS 的日期(例如 2014-02-14T12:30)。我想在 linux bash 中仅使用 date 命令在几秒内转换它。

所有日期均指 UTC 语言环境。

我知道这个问题很容易重复......关于将日期从一种格式转换为另一种格式有数十亿个问题,但我找不到我的特定场景

谢谢你...

【问题讨论】:

【参考方案1】:

使用 GNU 日期(来自 GNU coreutils 包),使用 -d 指定要解析的日期,使用 %s 指定自纪元以来的秒数

$ date -d"2014-02-14T12:30" +%s
1392381000

请注意,这会将要解析的日期解释为您的本地时区。如果您希望date 使用特定时区,则必须通过变量 TZ(更改date 的默认时区)或在日期字符串中指定该时区。对于 UTC:

$ TZ=UTC date -d"2014-02-14T12:30" +%s
1392381000

或在字符串中,根据 ISO 8601:

$ date -d"2014-02-14T12:30Z" +%s
1392381000

请参阅ISO 8601 on Wikipedia,了解如何在日期字符串中指定其他时区。

【讨论】:

这正是我尝试过的......但如果与epochconverter.com 给出的数字相比,它似乎报告了一个错误的数字。你能解释一下发生了什么吗? 我的意思是,“日期”输出似乎比 www.epochconverter.com 上给出的值晚了几个小时 我尝试了“-u”选项,但它似乎不起作用。 “-u”表示设置/打印UTC坐标 按照 BMW 的建议或在日期输入中包含时区,因此 $ date -d"2014-02-14T12:30 EDT" +%s 这个答案没有解决时区问题。我编辑添加了这个 - 希望没关系。【参考方案2】:

如果您安装gdate 来处理具有纳秒精度时区的日期字符串会更容易

install coreutils 你会得到gdate

在 Mac 上 brew install coreutils

gdate --date="2010-10-02T09:35:58.203Z" +%s%N

这在将时间序列值插入 influxdb 时特别有用

在 shell 脚本中variable = $(gdate --date="2010-10-02T09:35:58.203Z" +%s%N)

echo $variable

【讨论】:

您的答案似乎是指特定的 UNIX 变体(大概是 MacOS X)。请澄清您在谈论什么变体 - 否则这个答案只会令人困惑。例如,在 Linux 上没有“install”命令,在 Debian 上有一个“coreutils”包,但它不包含“gdate”(只有“date”)。 HI @sleske 抱歉,我已离开该项目,没有您要求的环境信息

以上是关于c语言怎么求两个日期相差的秒数,日期格式20140325150630和20140324150000的主要内容,如果未能解决你的问题,请参考以下文章

C/C++输入两个任意日期求相隔天数

MySQL计算两个日期相差的天数月数年数

C语言如何输入一个(小时:分钟)格式的时间与系统时间比较,得到相差的秒数

java 中怎么比较两个时间相差的秒数

在 Python 中确定两个日期之间的秒数

C语言求两个日期相差的天数