iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >LINUX C系统编程与PYTHON中的时间模块对比是怎样的
  • 808
分享到

LINUX C系统编程与PYTHON中的时间模块对比是怎样的

2023-06-04 11:06:29 808人浏览 安东尼
摘要

linux C系统编程与python中的时间模块对比是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。今天看Python时间模块time的时候发现和LINUX系统编程中

linux C系统编程python中的时间模块对比是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

今天看Python时间模块time的时候发现和LINUX系统编程中的时间调用函数基本一样,以前刚好没有好好学习LINUX C编程的时间模块就对比进行了学习。

一、时间存在方式

其实不管是C还是PYTHON这里都包含3种时间不同存在的方式

  • 日历时间:Epoch以来的秒及新纪元时间(1970年1月1日 00:00:00)以来的秒

  • 分解时间:实际上是时间在程序内部存在的结构,也是一个中间介质,C中使用结构体,PYTHON中使用元组

  1. LINUX C为tm结构体:

struct tm {              int tm_sec;                       int tm_min;                       int tm_hour;                      int tm_mday;                      int tm_mon;                       int tm_year;                      int tm_wday;                      int tm_yday;                      int tm_isdst;                                                            };
  1. PYTHON struct_time元组:

索引(Index)   属性(Attribute)   0               tm_year(年)     1               tm_mon(月)    2               tm_mday(日)  3               tm_hour(时)  4               tm_min(分)    5               tm_sec(秒)   6               tm_wday(weekday)     7               tm_yday(一年中的第几天)    8               tm_isdst(是否是夏令时)

可以看到他们基本是一致的

  • 可读时间:这种一般就是我们平时看到的一些方便读取的的时间,比如

2017-10-12 06:52:03(AM) +0800

就是方便人类读取的可读取时间

LINUX C可读时间格式:

%a     The abbreviated weekday name according to the current locale.%A     The full weekday name according to the current locale.%b     The abbreviated month name according to the current locale.%B     The full month name according to the current locale.%c     The preferred date and time representation for the current locale.%C     The century number (year/100) as a 2-digit integer. (SU)%d     The day of the month as a decimal number (range 01 to 31).%D     Equivalent  to  %m/%d/%y.   (Yecch—for  Americans only.  Americans should note that in other countries %d/%m/%y is rather common.  This means that in      international context this fORMat is ambiguous and should not be used.) (SU)%e     Like %d, the day of the month as a decimal number, but a leading zero is replaced by a space. (SU)%E     Modifier: use alternative format, see below. (SU)%F     Equivalent to %Y-%m-%d (the ISO 8601 date format). (C99)%G     The ISO 8601 week-based year (see NOTES) with century as a decimal number.  The 4-digit year corresponding to the ISO week number (see %V).  This has      the same format and value as %Y, except that if the ISO week number belongs to the previous or next year, that year is used instead. (TZ)%g     Like %G, but without century, that is, with a 2-digit year (00-99). (TZ)%h     Equivalent to %b.  (SU)%H     The hour as a decimal number using a 24-hour clock (range 00 to 23).%I     The hour as a decimal number using a 12-hour clock (range 01 to 12).%j     The day of the year as a decimal number (range 001 to 366).%k     The hour (24-hour clock) as a decimal number (range 0 to 23); single digits are preceded by a blank.  (See also %H.)  (TZ)%l     The hour (12-hour clock) as a decimal number (range 1 to 12); single digits are preceded by a blank.  (See also %I.)  (TZ)%m     The month as a decimal number (range 01 to 12).%M     The minute as a decimal number (range 00 to 59).%n     A newline character. (SU)%O     Modifier: use alternative format, see below. (SU)%p     Either  "AM" or "PM" according to the given time value, or the corresponding strings for the current locale.  Noon is treated as "PM" and midnight as      "AM".%P     Like %p but in lowercase: "am" or "pm" or a corresponding string for the current locale. (GNU)%r     The time in a.m. or p.m. notation.  In the POSIX locale this is equivalent to %I:%M:%S %p.  (SU)%R     The time in 24-hour notation (%H:%M).  (SU) For a version including the seconds, see %T below.%s     The number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC). (TZ)%S     The second as a decimal number (range 00 to 60).  (The range is up to 60 to allow for occasional leap seconds.)%t     A tab character. (SU)%T     The time in 24-hour notation (%H:%M:%S).  (SU)%u     The day of the week as a decimal, range 1 to 7, Monday being 1.  See also %w.  (SU)%U     The week number of the current year as a decimal number, range 00 to 53, starting with the first Sunday as the first day of week 01.  See also %V and      %W.%V     The ISO 8601 week number (see NOTES) of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least 4 days      in the new year.  See also %U and %W.  (SU)%w     The day of the week as a decimal, range 0 to 6, Sunday being 0.  See also %u.%W     The week number of the current year as a decimal number, range 00 to 53, starting with the first Monday as the first day of week 01.%x     The preferred date representation for the current locale without the time.%X     The preferred time representation for the current locale without the date.%y     The year as a decimal number without a century (range 00 to 99).%Y     The year as a decimal number including the century.%z     The +hhmm or -hhmm numeric timezone (that is, the hour and minute offset from UTC). (SU)%Z     The timezone name or abbreviation.%+     The date and time in date(1) format. (TZ) (Not supported in glibc2.)%%     A literal '%' character.

python 可读时间格式:

%Y  Year with century as a decimal number.%m  Month as a decimal number [01,12].%d  Day of the month as a decimal number [01,31].%H  Hour (24-hour clock) as a decimal number [00,23].%M  Minute as a decimal number [00,59].%S  Second as a decimal number [00,61].%z  Time zone offset from UTC.%a  Locale's abbreviated weekday name.%A  Locale's full weekday name.%b  Locale's abbreviated month name.%B  Locale's full month name.%c  Locale's appropriate date and time representation.%I  Hour (12-hour clock) as a decimal number [01,12].%p  Locale's equivalent of either AM or PM.Other codes may be available on your platform.  See documentation forthe C library strftime function.

本文使用这三个术语

二、日历时间

下面方法获取当前系统时间的当前时间

  • LINUX C:
    int gettimeofday(struct timeval *tv,struct timezone *tz);
    time_t time(time_t *timep)

  • PYTHON:
    time.time()
    上面的方式都是获取当前时间的日历时间的方式为了方便我们使用time方法

三、日历时间转换为分解时间

  • LINUX C:
    strcut tm* gmtime(const time_t* timep);
    strcut tm* localtime(const time_t* timep);

Each of these functions returns the value described, or NULL  in case an error was detected.
  • PYTHON:
    time.gmtime(seconds=None)
    time.localtime(seconds=None)

可以看到他们是一致的其中gmtime代表返回UTC时间,而localtime代表返回本地时区时间

四、将分解时间转换为日历时间

  • LINUX C:
    time_t mktime(struct tm* tmieptr)

RETURN VALUE      -1 in case of mktime() in case an error was detected.
  • PYTHON:
    time.mktime(p_tuple)

五、将分解时间转换为可读时间

  • LINUX C:
    size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);

RETURN VALUE      Provided that the result string, including the terminating null byte, does not exceed max bytes, strftime() returns the number of bytes (excluding the ter‐      minating  null  byte)  placed  in the array s.  If the length of the result string (including the terminating null byte) would exceed max bytes, then strf‐      time() returns 0, and the contents of the array are undefined.  (This behavior applies since at least libc 4.4.4; very old versions of libc, such  as  libc      4.4.1, would return max if the array was too small.)      Note  that the return value 0 does not necessarily indicate an error.  For example, in many locales %p yields an empty string.  An empty format string will      likewise yield an empty string.
  • PYTHON:
    strftime(format, p_tuple=None)

这里需要注意format,format在文章开头已经给出

六、将可读时间转换为分解时间

  • LINUX C:
    char *strptime(const char *s, const char *format, struct tm *tm);

RETURN VALUE      The return value of the function is a pointer to the first character not processed in this function call.  In case the input string contains  more  charac‐      ters  than required by the format string the return value points right after the last consumed input character.  In case the whole input string is consumed      the return value points to the null byte at the end of the string.  If strptime() fails to match all of the format string and therefore an  error  occurred      the function returns NULL.
  • PYTHON:
    strptime(string, format)
    这里需要注意format,format在文章开头已经给出

七、转换图

这里给出一张LINUX系统编程手册里面的一张图,其实python是一样的,红色箭头是本文涉及的函数

LINUX C系统编程与PYTHON中的时间模块对比是怎样的

Paste_Image.png

八、方法使用举例

下面使用C和PYTHON分别实现将日期

2017-10-12 08:52:03(AM) CST

转换分解时间,日历时间然后再减去3600秒转换回分解时间和可读时间的小程序,以熟悉使用方式

  • C程序:

#include<stdio.h>#include<time.h>#include<stdlib.h>#define MAXSIZE 99int  rtime2ctime(const char* r_time,time_t* ctime){       time_t i_ctime;       struct tm tm_st;       //此处根据固定测试转换为分解时间tm_st       if ( !strptime(r_time,"%Y-%m-%d %X(%p) %z",&tm_st))       {               return -1;       }       //此处将分解时间tm_st转换为日历时间ctime       if( (*ctime = mktime(&tm_st)) == -1)       {               return -1;       }       return 0;}int ctime2rtime(time_t c_time){       struct tm* tm_st = NULL;       char time[MAXSIZE] ;       //此处将日历时间转换为分解时间       if((tm_st = localtime(&c_time)) == NULL)       {               return -1;       }       //此处将分解时间转换为可读时间       if(strftime(time,MAXSIZE-1,"%Y-%m-%d %X(%p) %z",tm_st) == 0)       {               return -1;       }       printf("%s\n",time);       return 0;}int main(void){       char r_time[100] = "2017-10-12 07:52:03(AM) +0800";       time_t ctime;       if( rtime2ctime(r_time,&ctime) == -1 )       {               printf("rtime2ctime error\n");               return -1;       }       printf("2017-10-12 07:52:03(AM) +0800 to calenlar time is:%ld\n",ctime);       ctime = ctime - (time_t)3600;       printf("after sub 1 hours time is:");       if(ctime2rtime(ctime) == -1)       {               printf("ctime2rtime error\n");       }}
  • python程序:

import timedef rtime2ctime(r_time):    #此处根据固定测试可读时间转换为分解时间    p_time = time.strptime(r_time,"%Y-%m-%d %X(%p) %z")    #此处将分解时间tm_st转换为日历时间    return time.mktime(p_time)def ctime2rtime(ctime):    #此处将日历时间转换为分解时间    p_time = time.localtime(ctime)    #此处将分解时间转换为可读时间    r_time = time.strftime("%Y-%m-%d %X(%p) %z",p_time)    return r_timer_time="2017-10-12 06:52:03(AM) +0800"ctime = rtime2ctime(r_time)print("2017-10-12 06:52:03(AM) +0800 to calenlar time is:%d" %(ctime))ctime = ctime - 3600print("after sub 1 hours time is:%s" %(ctime2rtime(ctime)))

他们的运行结果均是:

2017-10-12 06:52:03(AM) +0800 to calenlar time is:1507762323after sub 1 hours time is:2017-10-12 05:52:03(AM) +0800

关于LINUX C系统编程与PYTHON中的时间模块对比是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网操作系统频道了解更多相关知识。

--结束END--

本文标题: LINUX C系统编程与PYTHON中的时间模块对比是怎样的

本文链接: https://www.lsjlt.com/news/237745.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • LINUX C系统编程与PYTHON中的时间模块对比是怎样的
    LINUX C系统编程与PYTHON中的时间模块对比是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。今天看python时间模块time的时候发现和LINUX系统编程中...
    99+
    2023-06-04
  • Python 并发编程中线程与进程的对比:何时使用哪种
    线程与进程:概念和区别 线程是轻量级的执行单元,与进程共享相同的地址空间和资源。它们创建和销毁的速度很快,这使得它们在处理密集型任务时非常高效。然而,线程不能跨越多个 CPU 核心,因为它们受到全局解释器锁 (GIL) 的限制。 进程是...
    99+
    2024-02-18
    Python 并发编程 线程 进程
  • Linux系统中的Mysql安装过程是怎样的
    这期内容当中小编将会给大家带来有关Linux系统中的Mysql安装过程是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Mysql是 Oracle 旗下得一款产品,属于关系型数据库,在 WE...
    99+
    2023-06-28
  • 在Linux系统中安装Docker的过程是怎样的
    在Linux系统中安装Docker的过程是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在这篇博客中,我将引导您通过简单的步骤完成安装 Docker 的过程,安装dock...
    99+
    2023-06-22
  • 在systemd下管理Linux系统的时间和日期的方法是怎样的
    在systemd下管理Linux系统的时间和日期的方法是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。timedatectl是用来查询和修改系统时间和配置...
    99+
    2023-06-13
  • 在Linux系统中安装即时通信应用Telegram Messenger的教程是怎样的
    在Linux系统中安装即时通信应用Telegram Messenger的教程是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Telegram是和whatsapp类似的...
    99+
    2023-06-13
  • Linux系统中索引与PHP编程的最佳实践是什么?
    索引是一种优化数据库性能的技术,它可以加速数据的查找和查询。在Linux系统下,索引的使用对于PHP编程来说也是非常重要的。本文将介绍Linux系统中索引与PHP编程的最佳实践,并提供演示代码。 什么是索引? 索引是一种数据结构,它可以帮...
    99+
    2023-10-15
    unix 索引 linux
  • 如何使用Go语言编写上门做菜系统中的配送员工作时间管理模块?
    如何使用Go语言编写上门做菜系统中的配送员工作时间管理模块?随着外卖市场的蓬勃发展,上门做菜系统也成为了人们生活中的一种便利选择。而在上门做菜系统中,配送员是至关重要的一环。良好的工作时间管理对于配送员的工作效率和用户体验非常重要。本文将介...
    99+
    2023-11-02
    Go语言编程 上门做菜系统 配送员工作时间管理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作