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的主要内容,如果未能解决你的问题,请参考以下文章