time和datetime

常用的转换方法:

"2013-10-10 23:40:00" ---> 1381419600.0 
In [24]: time.mktime(time.strptime("2013-10-10 23:40:00", "%Y-%m-%d %H:%M:%S"))
Out[24]: 1381419600.0 1381419600---> '2013-10-10 23:40:00' time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(1381419600) ) # "2013-10-10 23:40:00"

 

 

 

 

 

 

在Python中,与时间处理有关的模块包括:time,datetime以及calendar。

通常有这几种方式来表示时间:

1)时间戳

时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

time.time()                    # 返回当前时间的时间戳

 2)格式化的时间字符串

time.asctime                 # 返回字符串格式的当前时间

'Mon Mar  5 08:40:19 2018'

 

time.ctime                    # 返回字符串格式的当前时间

'Mon Mar  5 08:40:54 2018'

 

 3)元组(tuple或struct_time)共九个元素

time.gmtime()              # 返回元组格式的当前时间

time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=0, tm_min=41, tm_sec=16, tm_wday=0, tm_yday=64, tm_isdst=0)

 

time.localtime()            # 返回元组格式的当前时间

time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=8, tm_min=41, tm_sec=43, tm_wday=0, tm_yday=64, tm_isdst=0)

 

 时间格式转换:

time.localtime(t):        #将一个时间戳转换为当前时区的struct_time。

time.localtime(1520210547)
Out[7]: time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=8, tm_min=42, tm_sec=27, tm_wday=0, tm_yday=64, tm_isdst=0)

 

time.strptime(t, [format])             #将一个字符串格式化为struct_time

              如:t = 'Tue Mar 14 12:10:36 2017'     time.strptime(t)  # 返回元组格式的时间

              time.struct_time(tm_year=2017, tm_mon=3, tm_mday=14, tm_hour=12, tm_min=10,  tm_sec=36,               tm_wday=1, tm_yday=73, tm_isdst=-1)

time.strptime('Mon Mar  5 08:40:19 2018')
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=8, tm_min=40, tm_sec=19, tm_wday=0, tm_yday=64, tm_isdst=-1)

 

 

 

time.mktime(t):           #将一个struct_time转化为时间戳。

time.mktime(time.strptime('Mon Mar  5 08:40:19 2018', ))
1520210419.0

 

time.strftime(format,[t])  #将一个struct_time转化为格式化的时间字符串。

           如:time.strftime('%Y-%m-%d %H:%M)   #无t参,返回指定的字符串格式的当前时间'2017-03-14 12:00'

 

 

 

             time.strftime('%m-%b-%Y %H:%M:%S', t)      #有t参, 将一个struct_time转化为格式化的时间。

time.strftime('%Y-%m-%d %H:%M')
'2018-03-05 08:46'

 

 

 

      

time.strftime('%Y-%m-%d %H:%M', time.localtime(1520000000))
'2018-03-02 22:13'

 

通过以上四个方法,可见时间格式的转换,struck_time可以直接和另外两种格式转换,struck_time也可以直接由另外两种格式转换而来。时间戳和字符串格式之间的转换,需要先转换成struck_time,详见示例。

 

 

 

 

时间戳和格式化的字符串之间的转换:

  1. 将字符串的时间转换为时间戳 a = "2013-10-10 23:40:00" timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")  # 先将字符串的时间转换为元组 time.mktime(timeArray)          # 再将元组转换为时间戳

     a = "2013-10-10 23:40:00" 
    timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S")
    # out:time.struct_time(tm_year=2013, tm_mon=10, tm_mday=10, tm_hour=23, tm_min=40, tm_sec=0, tm_wday=3, tm_yday=283, tm_isdst=-1)
    time.mktime(timeArray)
    # Out[23]: 1381419600.0
    
    "2013-10-10 23:40:00" ---> 1381419600.0
    In [24]: time.mktime(time.strptime("2013-10-10 23:40:00", "%Y-%m-%d %H:%M:%S"))
    Out[24]: 1381419600.0

     

  2. datetime方法:

    now = datetime.datetime.now() #这是时间组格式 otherStyleTime = now.strftime("%Y-%m-%d %H:%M:%S")

  3. 时间戳转换为指定格式日期: timeStamp = 1381419600 timeArray = time.localtime(timeStamp)         # 先将时间戳转换为元组 time.strftime("%Y-%m-%d %H:%M:%S", timeArray)       # 再将元组转换为字符串 "2013-10-10 23:40:00"

    datatime方法也可以: dateArray = datetime.datetime.utcfromtimestamp(timeStamp)   # 先将时间戳转换为元组 dateArray.strftime("%Y-%m-%d %H:%M:%S")      # 再将元组转换为字符串 "2013-10-10 23:40:00"

    In [27]: timeStamp = 1381419600
    In [28]: timeArray = time.localtime(timeStamp) 
    In [29]:  time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
    Out[29]: '2013-10-10 23:40:00'
    
    
    1381419600---> '2013-10-10 23:40:00'
    time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(t1381419600) )

     

  4. 字符串格式更改 a = "2013-10-10 23:40:00",想改为 a = "2013/10/10 23:40:00" #方法:先转换为时间元组,然后转换转换回指定的格式 timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S") otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)

    timeArray = time.strptime(a, "%Y-%m-%d %H:%M:%S") 
    # time.struct_time(tm_year=2013, tm_mon=10, tm_mday=10, tm_hour=23, tm_min=40, tm_sec=0, tm_wday=3, tm_yd
    otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
    # Out[33]: '2013/10/10 23:40:00'

     

     

    时间计算:

  • time.localtime()[1] - 1              # 上个月

    In [38]: time.localtime()
    Out[38]: time.struct_time(tm_year=2018, tm_mon=3, tm_mday=5, tm_hour=9, tm_min=8, tm_sec=44, tm_wday=0, tm_yday=64, tm_isdst=0)
    
    In [39]: time.localtime()[:]
    Out[39]: (2018, 3, 5, 9, 8, 48, 0, 64, 0)

     

  • time.localtime()[7]                   # 返回今年的第多少天

  • 获得三天前的时间: threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days = 3)) #先获得元组的时间 time.mktime(threeDayAgo.timetuple())  #将元组转换为时间戳: threeDayAgo.strftime("%Y-%m-%d %H:%M:%S") 将元组转换为字符串格式: 注:timedelta()的参数有:days,hours,seconds,microseconds

 

 

 

datetime包含了所有date和time的属性

datetime模块定义了下面这几个类: datetime.date:表示日期的类。常用的属性有year, month, day; datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond; datetime.datetime:表示日期时间。 datetime.timedelta:表示时间间隔,即两个时间点之间的长度。 datetime.tzinfo:与时区有关的相关信息。

 

datetime.date的实例属性: t = datetime.date(2016, 3, 5) t.isoformat()        # 返回格式如,'YYYY-MM-DD'的字符串 t.timetuple()        # 返回日期对应的time.struct_time对象; t.isoweekday()       # 返回星期几

 

 

datetime.time的实例属性: t = datetime.time(20,20,20) t.isoformat()        # 返回格式如,'YYYY-MM-DD HH:MM:SS'的字符串

 

 

datetime.datetime的实例属性: t = datetime.datetime(2016,3,3,12,12,12) t.isoformat()        # 返回格式如,'YHH:MM:SS'的字符串

t.strptime(date_string, format):将格式字符串转换为datetime对象;

 

 

date,time,datetim用法类似,三者的时间计算和格式转换也类似

  •  # 由datetime格式的字符串,返回datetime格式的元组,与time.strptime(t, format)类似

    t = '03-Mar-2016 20:20:20'

    datetime.datetime.strptime(t,'%m-%b-%Y %H:%M:%S')

  • # 由datetime格式的元组,返回自定义格式的字符串,与time.strftime(format,[t])类似

    t = datetime.datetime(2015,3,3,12,12,12)

    t.strftime('%m-%b-%Y %H:%M:%S') 

  • datetime.datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象

  • t1 = t + datetime.timedelta(days=3)   # 时间计算,间隔参数可以为days,hours,minutes,seconds

posted on 2017-04-10 00:01  myworldworld  阅读(133)  评论(0)    收藏  举报

导航