• 时间操作


    import os,time,datetime
    f_t = os.stat('filew.txt')
    t_t = os.stat('test2.py')
    #方法二:
    #f_t = os.path.getmtime('filew.txt')
    #t_t = os.path.getmtime('test2.py')
    #st_atime (访问时间), st_mtime (修改时间), st_ctime(创建时间)
    print datetime.datetime.fromtimestamp(f_t.st_mtime)
    print datetime.datetime.fromtimestamp(t_t.st_mtime) #将时间戳转换为可读时间格式,如st_ctime=1462412494L,转换后为2016-05-05 09:41:34.484475
    
    dt = datetime.datetime.fromtimestamp(f_t.st_mtime)
    #格式化为字符串
    dt.strftime('%Y-%m-%d %H:%M:%S') #返回2016-05-05 09:41:34
    print dt.strftime('%Y-%m-%d %H:%M:%S')[0:10] #返回2016-05-05,切片
    #获取当前时间 time.asctime() time.localtime() #转换时间戳为本地时间 time.localtime(f_t) #如st_ctime=1462412494L,转换后为time.struct_time(tm_year=2016, tm_mon=5, tm_mday=5, tm_hour=9, tm_min=41, tm_sec=34, tm_wday=3, tm_yday=126, tm_isdst=0) time.localtime(t_t) #获取时间差 cha = datetime.datetime.fromtimestamp(ft) - datetime.datetime.fromtimestamp(tt) cha.days cha.seconds

    时间格式转换为时间戳:

    import time,datetime
    print time.time() #当前时间戳
    print time.ctime() #当前时间,string格式
    print time.localtime() #返回 time.struct_time(tm_year=2016, tm_mon=5, tm_mday=12, tm_hour=21, tm_min=15, tm_sec=40, tm_wday=3, tm_yday=133, tm_isdst=0)
    starttime=datetime.datetime.now()
    print time.mktime(starttime.timetuple()) #当前时间转换为时间戳

    字符串时间转换为时间戳:

    import time
    estrime = '2016-05-18 15:30:01'
    print time.strptime(estrtime,'%Y-%m-%d %H:%M:%S') #先将字符串格式转换为时间元组。返回:time.struct_time(tm_year=2016, tm_mon=5, tm_mday=18, tm_hour=15, tm_min=30, tm_sec=1, tm_wday=2, tm_yday=139, tm_isdst=-1)
    print time.mktime(time.strptime(estrtime,'%Y-%m-%d %H:%M:%S'))#将时间数组转换为时间戳。返回:1463556601.0

     注:时间元组就可比较大小

    将字符串时间转换为可比较的时间格式:

    fdate=‘20160905’
    datetime.datetime.fromtimestamp(time.mktime(time.strptime(fdate,'%Y%m%d'))) 

     时间加减计算:

    import datetime
    starttime=datetime.datetime.now()
    h2 = datetime.timedelta(hours=10) #返回 10:00:00
    d2 = datetime.timedelta(days=1) #返回 1 day, 0:00:00   没有months,years参数
    print starttime #返回 2016-05-12 20:43:41.473000
    print starttime+h2 #加10h,返回 2016-05-13 06:44:15.823000
    print starttime-d2 #减1天,返回 2016-05-11 20:43:41.473000
    print (starttime+d2 - starttime).total_seconds() # 返回 86400.0
    安装dateutil模块,加减月份
    sudo pip install python-dateutil --upgrade
    from dateutil.relativedelta import relativedelta
    print(datetime.date.today() - relativedelta(months=-3)
    datetime.datetime.now() #获取本地当前时间
    datetime.datetime.now().year #获取年份
    datetime.datetime.now() + datetime.timedelta(days=2) #+2天
    datetime.date(2016,3,2).strftime('%Y-%m-%d')  #返回2016-03-02
    datetime.time(14,33,22).strftime('%H:%M:%S')  #返回14:33:22
    print time.time() #返回1464586422.94
    thistime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())) #返回2016-05-30 13:33:42
    stoptime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time() + 3600)) #返回2016-05-30 14:33:42
    
    print thistime > stoptime #string格式,可以进行比较。返回False

    time和datetime中的strftime在多线程中是非安全的,在多线程中运行“time.strptime('2016-01-01 12:01:00','%Y-%m-%d %H:%M:%S')”会出现错误:AttributeError: _strptime,原因如下:

      in multithreads environment, when one thread is tring to import _strptime, but has not been fully imported, another threads tried to call strptime_module._strptime_time directly. This is why the bug happened.

    If you understand well why this bug happend, you should already have the workaround in your heart. Actually it’s really straightforward. All you need to do just is call once strptime before starting your threads.

    解决办法:

    1.先导入strftime模块:

    import _strptime
    import time

    2.在多线程函数中调用strptime:

    def t():
      print time.strptime('2016-01-01 12:01:00','%Y-%m-%d %H:%M:%S')

    或者直接加锁,相对来说还是先导入_strptime模块较好:

    def t():
         with lock:
          print time.strptime('2016-01-01 12:01:00','%Y-%m-%d %H:%M:%S')

    #格式化当前时间:

    time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())

    time.localtime(time.time()) == time.localtime()

    help(time)

    #格式化当前时间:

    from time import strftime,localtime
    print 'Now: %s' % strftime('%Y-%m-%d %H:%M:%S',localtime())

     
    将 q.pub_date返回值为:datetime.datetime(2016, 2, 2, 9, 8, 29, 490000, tzinfo=<UTC>)
    将其格式化为字符串类型:q.pub_date.strftime('%b-%d-%y %H:%M:%S')
  • 相关阅读:
    Linux命令备忘录
    Redis集群部署
    Java BIO、NIO、AIO 学习
    elasticsearch性能因素总结
    tomcat配置文件server.xml详解
    Tomcat性能优化及JVM内存工作原理
    JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
    HttpClient使用学习
    Java的三种代理模式
    yzoi1109&&viojs1042最小步数的一点看法——回文数
  • 原文地址:https://www.cnblogs.com/dreamer-fish/p/5088136.html
Copyright © 2020-2023  润新知