zoukankan      html  css  js  c++  java
  • Python3的日期和时间

    python 中处理日期时间数据通常使用datetime和time库

    因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。

    在Python文档里,time是归类在Generic Operating System Services中,换句话说,它提供的功能是更加接近于操作系统层面的。通读文档可知,time模块是围绕着 Unix Timestamp 进行的。

    time库主要包括一个类 struct_time,另外其他几个函数及相关常量。 需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。另外一点是,由于是基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 - 2038 之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用datetime模块更好。

    所以我们可以得到这样的结论:一般情况下我们会使用datetime库来处理日期和时间,而需要使用一些只有time库提供的函数时再单独引用,例如:sleep函数。

    datetiem库的使用方法,以及常用函数

    datetime库中定义了5个类,分别是

    1、date:表示日期

    2、dateitme:表示日期和时间

    3、time:表示时间

    4、timedelta:表示时间间隔

    5、tzinfo:时区相关信息

    一、datetime.date类

    date类可以用年月日参数进行初始化

    day1 = datetime.date(2019, 4, 19)

    常用方法:

    以下方法包括了类方法对象方法,这两者的区别在于,类方法可以直接由类调用也可以由对象调用,而对象方法必须由对象调用,所以通常类方法获得的结果与具体对象无关,而实际使用时也通常以类调用为主。

    1、ctime() 对象方法,返回格式如 Sun Apr 16 00:00:00 2019

    >>> day1.ctime()
    'Fri Apr 19 00:00:00 2019'

    2、fromtimestamp(timestamp) 类方法,根据给定时间戳,返回一个date对象

    >>> datetime.date.fromtimestamp(1555683831)
    datetime.date(2019, 4, 19)
    

    3、today() 类方法,返回一个代表今天日期的date对象

    >>> datetime.date.today()
    datetime.date(2019, 4, 19)
    

    4、isocalendar() 对象方法,返回格式如(年份, 第几周, 一周中第几天)的元组

    >>> day1.isocalendar()
    (2019, 16, 5)
    

    上面数据表示day1是2019年第16周的星期5

    5、isoformat() 对象方法,返回格式为YYYY-MM-DD格式的字符串

    >>> day1.isoformat()
    '2019-04-19'
    

    6、isoweekday() 对象方法,返回日期是星期几,1到7分别表示星期一到星期日

    >>> day1.isoweekday()
    5
    

    上面数据表示day1(2019年4月19日)是星期5

    7、replace(year, month, day) 对象方法,返回一个新date对象,替换指定年、月、日,没有替换的保持不变

    >>> day1
    datetime.date(2019, 4, 19)
    >>> day1.replace(2018)
    datetime.date(2018, 4, 19) # 这里年份被替换了
    >>> day1
    datetime.date(2019, 4, 19) # 对象本身并不会变化
    >>> day1.replace(year=2017, day=20)
    datetime.date(2017, 4, 20) # 这里指定了替换年和日,月份保持不变
    

    8、strftime(format) 对象方法,根据参数对date对象进行格式化输出

    >>> day1.strftime('%Y-%m-%d')
    '2019-04-19' # 这个格式与isoformat等价
    

    format参数中试用的日期格式化符号有:

    %y 两位数的年份表示(00-99)

    %Y 四位数的年份表示(000-9999)

    %m 月份(01-12)

    %d 月内中的一天(0-31)

    %H 24小时制小时数(0-23)

    %I 12小时制小时数(01-12)

    %M 分钟数(00=59)

    %S 秒(00-59)

     
    %a 本地简化星期名称

    %A 本地完整星期名称

    %b 本地简化的月份名称

    %B 本地完整的月份名称

    %c 本地相应的日期表示和时间表示

    %j 年内的一天(001-366)

    %p 本地A.M.或P.M.的等价符

    %U 一年中的星期数(00-53)星期天为星期的开始

    %w 星期(0-6),星期天为星期的开始

    %W 一年中的星期数(00-53)星期一为星期的开始

    %x 本地相应的日期表示

    %X 本地相应的时间表示

    %Z 当前时区的名称

    %% %号本身

    9、timetuple() 对象方法,返回日期对应的time.struct_time对象

    >>> day1.timetuple()
    time.struct_time(tm_year=2019, tm_mon=4, tm_mday=19, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=109, tm_isdst=-1)

    10、weekday() 对象方法,返回日期的星期数,为0至6,0表示星期一,6表示星期日

    >>> day1.weekday()
    4  # 这里4表示的是星期5,这和isoweekday不同

    二、datetime.time类

    time类有5个参数datetime.time(hour(小时), minute(分钟), second(秒), microsecond(微秒), tzinfo(时区)),在这里时区暂不讨论。

    创建对象时,小时是必须的参数,其他视情况而定。time类在实际应用中很少用到。

    常用方法:

    1、replace() 对象方法,替换时间参数

    2、strftime(format) 对象方法,根据format格式返回时间字符串

    3、isoformat() 对象方法,按照hh:mm:dd格式输出时间

    三、 datetime.datetime类

    1、ctime() 对象方法,返回格式如 Sun Apr 16 00:00:00 2019

    2、now() 类方法,返回一个表示当前系统日期和时间的datetime对象。datetime类也有类方法today(),结果与now()相同。

    >>> datetime1= datetime.datetime.now()
    >>> datetime1
    datetime.datetime(2019, 4, 19, 23, 41, 15, 697288)

    3、date() 对象方法,返回一个表示datetime对象日期的date对象

    >>> datetime1.date()
    datetime.date(2019, 4, 19)

    4、time() 对象方法,返回一个表示datetime对象时间的time对象

    >>> datetime1.time()
    datetime.time(23, 41, 15, 697288)

    5、fromtimestamp(timestamp) 类方法,根据指定时间戳返回一个datetime对象

    6、replace() 对象方法,返回一个新的datetime对象,替换某个日期和时间参数其余保持不变

    7、strftime(format) 对象方法,根据format参数格式化输出

    8、strptime(time_string, format) 类方法,将字符串time_string转换成datetime对象,字符串的日期格式由format指定

    >>> datetime2 = datetime.datetime.strptime('2019-04-19 21:05:35','%Y-%m-%d %H:%M:%S')
    >>> datetime2
    datetime.datetime(2019, 4, 19, 21, 5, 35)
    

    四、datetime.timedelta类

    这个类主要用于进行两个日期的计算,例如:

    >>> a = datetime.datetime.now()
    >>> b = datetime.datetime.now()
    >>> a
    datetime.datetime(2019, 4, 19, 23, 56, 32, 487326)
    >>> b
    datetime.datetime(2019, 4, 19, 23, 56, 42, 84236)
    >>> b-a
    datetime.timedelta(seconds=9, microseconds=596910)
    >>> (b-a).seconds
    9
    >>> b = b.replace(year=2018, month=5)
    >>> b
    datetime.datetime(2018, 5, 19, 23, 56, 42, 84236)
    >>> a -b
    datetime.timedelta(days=334, seconds=86390, microseconds=403090)
    >>> (a-b).seconds
    86390
    >>> (a-b).total_seconds()
    28943990.40309

    给时间加一小时

    >>> time1 =  datetime.datetime.now()
    >>> one_hour = datetime.timedelta(hours=1)
    >>> time1
    datetime.datetime(2019, 4, 20, 0, 11, 21, 174662)
    >>> time1 + one_hour
    datetime.datetime(2019, 4, 20, 1, 11, 21, 174662)

    类似的如果把timedelta参数设置为你要变动的时间大小,在进行加减运算就可以了。

    转载于:https://my.oschina.net/u/2357619/blog/3039568

  • 相关阅读:
    创建自定义图标和图像
    使用_CRTDBG_LEAK_CHECK_DF检查VC程序的内存泄漏(转)
    Hadoop Netflix数据统计分析2(转)
    系统提供的按钮和图标
    STATIC变量问题
    表格视图,文本视图和Web视图
    Hadoop Netflix数据统计分析1(转)
    获取程序数据路径(转)
    C++中STRING转为INT (转)
    netflix 推荐算法学习1(转)
  • 原文地址:https://www.cnblogs.com/twodog/p/12134899.html
Copyright © 2011-2022 走看看