Python之time

Sep 9, 2015


碰到 time 模块,记录下用过的方法


Python time strptime()方法

  • Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组。

  • strptime()方法语法:time.strptime(string[, format])

      #!/usr/bin/python
      import time
    
      struct_time = time.strptime("30 Nov 00", "%d %b %y")
      print "returned tuple: %s " % struct_time
        
      输出:
      returned tuple: (2000, 11, 30, 0, 0, 0, 3, 335, -1)
    

Python中时间日期格式化符号:

  • %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 当前时区的名称
  • %% %号本身

Python time mktime()方法

  • Python time mktime() 函数执行与gmtime(), localtime()相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数。

  • mktime()方法语法:time.mktime(t)

      #!/usr/bin/python
      import time
    
      t = (2009, 2, 17, 17, 3, 38, 1, 48, 0)
      secs = time.mktime( t )
      print "time.mktime(t) : %f" %  secs
      print "asctime(localtime(secs)): %s" % time.asctime(time.localtime(secs))
        
      输出:
      time.mktime(t) : 1234915418.000000
      asctime(localtime(secs)): Tue Feb 17 17:03:38 2009
    

Python datetime 模块

    import datetime
    
    date1 = '09/17/2015'
    date2 = datetime.datetime.strptime(date1,"%m/%d/%Y")
    date3 = date2.strftime("%Y-%m-%d")
    print date2
    print date3
    
    输出:
    # 2015-09-17 00:00:00
    # 2015-09-17
  • datetime.datetime.now()获取系统当前时间

      import datetime
      #获得当前时间
      now = datetime.datetime.now()  ->这是时间数组格式   #time.time()返回的是浮点数形式
      #获取日期:
      date = now.date()
      #转换为指定的格式:
      otherStyleTime = now.strftime("%Y-%m-%d %H:%M:%S")
    
  • 计算时间差

      threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 3))      #三天前时间
      threeHoursAgo = (datetime.datetime.now() - datetime.timedelta(hours = 3))     #三小时前时间
      threeMinutesAgo = (datetime.datetime.now() - datetime.timedelta(minutes = 3))   #三分钟前时间
        
      #注意 days/hours/minutes都必须是整数。不能是字符类型
        
      #上面返回的都是datetieme对象 例如 datetime.datetime(2015,10,12,12,38,11,57000)
        
      #获取日期:
      date = threeDayAgo.date() #datetime.date(2015, 10, 9)
        
      #转换为其他格式时间
      datetime.datetime.strftime(date,"%Y-%m-%d") #转换成了字符串 '2015-10-09'
      time.mktime(threeDayAgo.timetuple()) #转换成了浮点数形式
    
  • 修改获取的时间

     a = '201510161100'
     b = datetime.datetime.strptime(a,"%Y%m%d%H%M")
     b
     #输出:datetime.datetime(2015,10,16,11,0)
        
     b.replace(hour=23)
     b 
     #输出:datetime.datetime(2015,10,16,23,0)
     #还可以改year,day 
        
     #此外:
     c = datetime.datetime.today().date()
     c 
     #输出:datetime.date(2015, 10, 16)
     c.replace(day=11)
     #输出:datetime.date(2015, 10, 11) ---
    

待解决的问题

    updatetimeitem = list.find("dl", {"class":"list_con clearfix"}).find("span", {"class":"dp_time"}).get_text().strip()
    if "今天".decode('utf-8') in updatetimeitem :     #时间格式为“今天10:24”
        date =  datetime.datetime.strftime (datetime.datetime.today().date(),"%Y%m%d") #日期
        
        # time = filter(lambda x:x.isdigit(), updatetimeitem) #时间
        # updatetime = date + time    这样写下面mktime会报错,'unicode ...没有mktime属性之类的'
        
        updatetime = datetime.datetime.strftime (datetime.datetime.today().date(),"%Y%m%d") + filter(lambda x:x.isdigit(), updatetimeitem)  #这样写通过
        
        item.updatetime = time.mktime(time.strptime(updatetime, "%Y%m%d%H%M")) 

参考文章:RUNOOB.COM


结语:

坚持每天进步一点点…