如何实现秒数和日期之间的转换

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实现秒数和日期之间的转换相关的知识,希望对你有一定的参考价值。

我想要进行对时方面的工作,先把日期转换为距标准时间的秒数,计算完成后在转化为日期(包括时分秒)。
听说有库函数可以利用 ,具体哪个库,是time.h吗?怎么用啊?
急求啊!
给定年 月 日 时 分 秒 怎么转换为秒数,
给定秒怎么转换为年月日时分秒,最好直接给出基于C语言的函数。

#include <stdio.h>
#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.datetimedatetime.time 类型:

from datetime import timedelta

secs = timedelta(hours=rec.hour, minutes=rec.minute, seconds=rec.second).seconds

【讨论】:

以上是关于如何实现秒数和日期之间的转换的主要内容,如果未能解决你的问题,请参考以下文章

如何实现时间戳转换

如何将UTC秒数转换为日期,100分,在线等

如何计算两个日期之间的秒数?

Visual C++ 如何将日期时间转换为自 1970 年以来的秒数

如何将 Python 日期时间对象的时间部分转换为自一天开始以来的总秒数

如何将秒转换为R中的日期