Python中的时间模块:datetime

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Maverick_7/article/details/82315312

Unix时间戳: 在 1971 年,《Unix Programmer’s Manua》出版,将格林威治时间(GMT)1971年1月1日0时0分0秒作为系统的起始时间。后来为方便记忆和计算,起始时间修改成 1970 年。现今的计算机系统,或多或少受 Unix 的影响,延续 Unix 的计时方式。从此之后 (GMT)1970年1月1日0时0分0秒 就成为 Unix 世界的起始时间,甚至超越 Unix 而成为整个计算机世界的起始时间。

Unix 中常常使用一个数字记录时间,表示距离起始时间相差的秒数(根据系统的精度,时间单位有时毫秒,有时是纳秒)。大于 0 表示在起始时间之后,小于 0 就表示在起始时间之前。这个数字有时是浮点类型、有时是整数类型,但都称这个数字为 Unix 时间戳(Timestamp)。

时间戳转换工具

# 使用time
timeStamp = 1381419600
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
print(otherStyleTime)   # 2013--10--10 23:40:00
# 使用datetime
timeStamp = 1381419600
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
print(otherStyleTime)   # 2013--10--10 15:40:00

import time
import datetime

dtime = datetime.datetime.now()
dtime
# datetime.datetime(2018, 9, 2, 11, 55, 40, 641630)

ans_time = int(time.mktime(dtime.timetuple()))
ans_time
# 1535860540

time = datetime.datetime.fromtimestamp(ans_time)
time
# datetime.datetime(2018, 9, 2, 11, 55, 40)

time = datetime.datetime.utcfromtimestamp(ans_time)
time
# datetime.datetime(2018, 9, 2, 3, 55, 40)

pd.to_datetime(ans_time,unit='s')
# Timestamp('2018-09-02 03:55:40')



from datetime import datetime, date, time

# >>> # Using datetime.combine()
d = date(2005, 7, 14)
t = time(12, 30)
datetime.combine(d, t)
datetime(2005, 7, 14, 12, 30)
datetime.now()   
datetime.utcnow()   

############################################################################################
"""
strftime 即 string format time,用来将时间格式化成字符串
strptime 即string parse time,用来将字符串解析成时间。
"""

start = datetime(2011,1,7,1,21,1) # datetime.datetime(2011, 1, 7, 1, 21, 1)
# datetime(%Y,%m,%d,%H,%M,%S): 
# datetime共有6个参数,分别代表的是年月日时分秒。其中年月日是必须要传入的参数,时分秒可以不传入,默认全为零。
start.strftime('%Y-%m-%d %H:%M:%S')
# '2011-01-07 01:21:01'
datetime.strptime('2011-01-07 01:21:01','%Y-%m-%d %H:%M:%S')
# datetime.datetime(2011, 1, 7, 1, 21, 1)


# The strftime method formats a datetime as a string: 
In [1]: dt.strftime('%m/%d/%Y %H:%M')
Out[1]: '10/29/2011 20:30'
# Strings can be converted (parsed) into datetime objects using the strptime function: 
In [2]: datetime.strptime('20091031', '%Y%m%d')
Out[2]: datetime.datetime(2009, 10, 31, 0, 0)

# 字符串形式的时间格式转化为时间格式
dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
# 时间格式转化为字符串
# time.strftime( '%Y-%m-%d' , time.localtime(time.time()))

# >>> # Formatting datetime
print(dt.strftime("%A, %d. %B %Y %I:%M%p"))
# 'Tuesday, 21. November 2006 04:30PM'
'The {1} is {0:%d}, the {2} is {0:%B}, the {3} is {0:%I:%M%p}.'.format(dt, "day", "month", "time")
# 'The day is 21, the month is November, the time is 04:30PM.'


'''
Datetime format specification:

%Y Four-digit year
%y Two-digit year
%m Two-digit month [01, 12] %d Two-digit day [01, 31]
%H Hour (24-hour clock) [00, 23]
%I Hour (12-hour clock) [01, 12]
%M Two-digit minute [00, 59]
%S Second [00, 61] (seconds 60, 61 account for leap seconds) %w Weekday as integer [0 (Sunday), 6]
%Y Four-digit year
%y Two-digit year
%m Two-digit month [01, 12] %d Two-digit day [01, 31]
%H Hour (24-hour clock) [00, 23]
%I Hour (12-hour clock) [01, 12]
%M Two-digit minute [00, 59]
%S Second [00, 61] (seconds 60, 61 account for leap seconds) %w Weekday as integer [0 (Sunday), 6]
'''

datetime.strptime解析时间需要输入相应的时间格式,而dateutil第三方库中的parser.parse方法则更加灵活。 dateutil.parser 有时候也会有一定的麻烦,比如 '42'会被解析为2042 年加上今天的日期:datetime.datetime(2042, 9, 1, 0, 0)


from dateutil.parser import parse
parse('2011-01-03') # datetime.datetime(2011, 1, 3, 0, 0)
parse('Jan 31, 1997 10:45 PM') # datetime.datetime(1997, 1, 31, 22, 45)
parse('6/12/2011', dayfirst=True) # datetime.datetime(2011, 12, 6, 0, 0)

# pandas:
datestrs = ['2011-07-06 12:00:00', '2011-08-06 00:00:00']
pd.to_datetime(datestrs)
# DatetimeIndex(['2011-07-06 12:00:00', '2011-08-06 00:00:00'], dtype='datetime64[ns]', freq=None)
# >>> # Using datetime.timetuple() to get tuple of all attributes
tt = dt.timetuple()
for it in tt:   
     print(it)

# 2006    # year
# 11      # month
# 21      # day
# 16      # hour
# 30      # minute
# 0       # second
# 1       # weekday (0 = Monday, 6 = Sunday)
# 325     # number of days since 1st January
# -1      # dst - method tzinfo.dst() returned None

############################################################################################

# timedelta:

datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

# 100天前的日期

import datetime
(datetime.datetime.now() - datetime.timedelta(days = 100)).strftime("%Y-%m-%d") 

# NOW

datetime.strftime(datetime.now(), '%Y-%m-%d %H:%M:%S')

#生成当前时刻的时间:
import time
time.strftime( '%Y-%m-%d %H:%M' , time.localtime( time.time( ) ) )
# '2018-05-16 18:18'

#时间外推:
import datetime as dtm

def TaftD ( FORMAT_DATE , i ): 
    """
    返回几天后的时间
    """
    return (dtm.datetime.strptime( FORMAT_DATE , '%Y-%m-%d' ) + dtm.timedelta( days = i )).strftime( '%Y-%m-%d' )

def TaftH ( FORMAT_TIME , i ): 
    """
    返回几小时后的时间
    """
    return (dtm.datetime.strptime( FORMAT_TIME , '%Y-%m-%d %H:%M:%S' ) + dtm.timedelta( hours = i )).strftime( '%Y-%m-%d %H:%M:%S' )

TaftD("2018-05-17",-2)
# '2018-05-15'
TaftH("2018-05-17 10:40:00",2)
# '2018-05-17 12:40:00'

# 返回今天是周几

x='2018-05-27'
int(dtm.datetime(int(x[ :4 ]),int(x[ 5:7 ]),int(x[8: ])).strftime('%w'))
# 0 表示周日

datetime.datetime(2017, 1, 1).strftime("%w")      # 0-6 SUN-SAT

REFERENCE

PYTHON时间处理

2

3

猜你喜欢

转载自blog.csdn.net/Maverick_7/article/details/82315312