如何实现秒数和日期之间的转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现秒数和日期之间的转换相关的知识,希望对你有一定的参考价值。
我想要进行对时方面的工作,先把日期转换为距标准时间的秒数,计算完成后在转化为日期(包括时分秒)。
听说有库函数可以利用 ,具体哪个库,是time.h吗?怎么用啊?
急求啊!
给定年 月 日 时 分 秒 怎么转换为秒数,
给定秒怎么转换为年月日时分秒,最好直接给出基于C语言的函数。
#include <stdlib.h>
#include <time.h>
/*************************************************************************
* @brief : 日期这字符串转为秒数
* @inparam :
|__ pszDate 2010/04/12/23/59/59、 2010-04-12 23:59:59类似字符串
* @outparam : NA
* @return :
|__ time_t
*************************************************************************/
time_t DateStr2Sec(char* pszDate)
struct tm tmDate = 0;
tmDate.tm_year = atoi(pszDate) - 1900;
tmDate.tm_mon = atoi(pszDate + 5) - 1; // 注意月份是从0开始的
tmDate.tm_mday = atoi(pszDate + 8); // 月份日期是从1开始的
tmDate.tm_hour = atoi(pszDate + 11);
tmDate.tm_min = atoi(pszDate + 14);
tmDate.tm_sec = atoi(pszDate + 17);
return mktime(&tmDate);
/*************************************************************************
* @brief : 时间转换成字符串
* @inparam :
|__ iTime 时间戳
* @outparam : pszTime
* @return : NA
*************************************************************************/
void TimeFormatInt2Str(int iTime, char *pszTime)
time_t tCurrent;
struct tm tmFmtDatetime;
struct tm *ptmFmtDatetime = NULL;
if(iTime == 0)
return;
tCurrent = iTime;
ptmFmtDatetime = localtime_r(&tCurrent, &tmFmtDatetime);
if (ptmFmtDatetime == NULL)
return;
sprintf(pszTime, "%04d-%02d-%02d %02d:%02d:%02d",
ptmFmtDatetime->tm_year+1900,
ptmFmtDatetime->tm_mon+1,
ptmFmtDatetime->tm_mday,
ptmFmtDatetime->tm_hour,
ptmFmtDatetime->tm_min,
ptmFmtDatetime->tm_sec
);
追问
请问你 这个是C语言吗 ?可不可以给出具体的注释?有些函数看不懂比如atoi?localtime_r?
追答atoi和localtime_r你可以baidu一下啊。这些都是很基础的函数。
参考技术A 巧用date命令将秒数与日期互相转换。例如有一个格林威治的秒值1318995200,需要将其转成具体的日期,可以用如下命令:
[root@mounix ~]# date "+%s"
1337651598
[root@mounix ~]# date -d "$((1337651598 - `date '+%s'` )) sec" +%Y-%-m-%-d
2012-5-22
[root@mounix ~]# date -d "2012-05-18 04:00:00" +%s
1337284800
[root@mounix ~]#
如何将 Python 日期时间对象的时间部分转换为自一天开始以来的总秒数
【中文标题】如何将 Python 日期时间对象的时间部分转换为自一天开始以来的总秒数【英文标题】:How to convert the time portion of a Python datetime object to total number of seconds since start of the day 【发布时间】:2015-11-17 22:13:09 【问题描述】:我有一个返回日期时间对象的脚本,如下所示:
rec = record[14] #index 14 is a straight datetime object
rec2 = rec.time() #sends time part to rec2
我现在要做的就是将 rec2 转换为整数类型的秒数。任何有关如何做到这一点的见解将不胜感激。
【问题讨论】:
秒从什么参考点开始?你能告诉我们你的输出吗? @khtad 14:54:02.547277 或 14:54:02。可能是其中之一,具体取决于来源。 你需要“自纪元以来的秒数”格式吗?也不清楚rec.time()
返回什么类型?
***.com/questions/7852855/…
@Dimpermanence 所以你想要 3 或 2,分别?
【参考方案1】:
这个怎么样:
rec2.hour*3600 + rec2.minute*60 + rec2.second
我还发现了这个:
Get seconds since midnight in python
【讨论】:
显然这是一个很好的问题,因为我觉得它很简单:) 我只是想将 datetime 的时间部分转换为秒。这些秒数必须是整数类型,而不是字符串。 Argghh...看,这就是我正在做的,但它看起来...嗯,令人费解。不是你的,我的。因为我有更多的步骤,过了一会儿它就像“来吧,真的吗?” 似乎应该有一个简单的方法给定一个日期来获取自午夜以来的秒数,但我还没有找到比这更好的方法。 好吧,我目前正在使用这个: s = int(sum(int(i) * 60**index for index, i in enumerate(rec2.split(":")[:: -1]))) 并且这可行,但它非常复杂。 其实,这似乎是一个聪明的答案,请发布。【参考方案2】:我早些时候通过采用类似question 的代码“解决”了这个难题,尽管我真的希望有更直接的方法。我拿了@Nolen Royal 的“厚颜无耻”的一个衬里,并将其包裹在 int() 函数中。本质上:
rec = record[14] #stores index 14 of a list to rec which is a full datetime object
rec2 = rec.time() #stores time portion of that datetime object to rec2
rec3 = rec2.strftime('%H:%M:%S') #uses strftime to convert to string
s = int(sum(int(i) * 60**index for index, i in enumerate(rec3.split(":")[::-1]))) #converts that string to integer
令人费解,但它确实有效......不过,如果有人有更好的东西,我会很感兴趣。
【讨论】:
【参考方案3】:The question "Python Time conversion h:m:s to seconds" (that you've linked) 展示了一个简单有效的单行解决方案,说明如何获取自午夜以来的整数秒数,该解决方案适用于 datetime.datetime
和 datetime.time
类型:
from datetime import timedelta
secs = timedelta(hours=rec.hour, minutes=rec.minute, seconds=rec.second).seconds
【讨论】:
以上是关于如何实现秒数和日期之间的转换的主要内容,如果未能解决你的问题,请参考以下文章
Visual C++ 如何将日期时间转换为自 1970 年以来的秒数