Python의 시간 및 날짜/시간 모듈에 대한 자세한 소개

零下一度
풀어 주다: 2017-07-20 15:33:15
원래의
2512명이 탐색했습니다.

시간 모듈에는 세 가지 주요 시간 표현 형식이 있습니다:

a. 타임스탬프 타임스탬프 타임스탬프는 1970년 1월 1일 00:00:00부터 시작하여 초 단위로 계산된 오프셋을 나타냅니다.

b , struct_time 시간 튜플 , 총 9개의 요소 그룹이 있습니다.

 c. 형식 시간 형식 시간, 형식화된 구조를 사용하면 시간을 더 쉽게 읽을 수 있습니다. 사용자 정의 형식과 고정 형식이 포함됩니다.

time

일반적으로 사용되는 함수는 time.time()time.sleep()입니다. time.time()time.sleep()函数。

import timeprint(time.time())
로그인 후 복사
1499305554.3239055
로그인 후 복사

上面的浮点数称为UNIX纪元时间戳,是从1970年1月1日0点起到今天经过的秒数。可以看到后面有6位小数,使用round函数,可以实现浮点数的四舍五入。如下

# 默认四舍五入到整数位,即不保留小数print(round(time.time()))# 可指定参数保留的小数位数print(round(time.time(), 2))
로그인 후 복사
1499305554
1499305554.49
로그인 후 복사

time.sleep(sec)可以让当前休眠,参数填入秒(s)。

print('good')
time.sleep(5.5)# 5.5秒后才打印这句print('yes')
로그인 후 복사
good
yes
로그인 후 복사

其他一些函数的使用

# 返回UTC时间print(time.gmtime())# 返回本地时间,在中国就是UTC+8print(time.localtime())
로그인 후 복사
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=1, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=9, tm_min=46, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=0)
로그인 후 복사

可以发现这是一个元组类型,中国所在时区位UTC+8,可以发现除了tm_hour不一样(它们相差了刚好+8),其余都一样。

下面的函数可以返回一个格式化的日期时间,看起来更加直观。

print(time.ctime())print(time.asctime())# 由于使用默认参数和上面的结果一样print(time.ctime(time.time()))print(time.asctime(time.localtime()))
로그인 후 복사
Thu Jul  6 09:46:15 2017
Thu Jul  6 09:46:15 2017
Thu Jul  6 09:46:15 2017
Thu Jul  6 09:46:15 2017
로그인 후 복사
  • ctime()可以传入一个时间戳,没有指定参数时,默认使用当前时间戳作为参数。即time.time()

  • gtime()可以传入一个struct_time,没有指定参数时,默认使用当前时间。即time.localtime()

struct_time转化为字符串及字符串转为struct_time

  • strptime的第一个参数是字符串形式的日期,第二个参数是自定义的日期转换格式。这两个参数的格式一定要对应。比如time.strptime('2017/7/6', '%Y-%m-%d')一个用了斜杠,一个用了短横线,就会报错。此函数返回一个struct_time

  • strftime的第一个参数是想要转化成的日期格式,第二个参数是一个struct_time,此函数将元组形式的struct_time转化成第一个参数指定的格式样子,返回的是转化后的日期字符串形式。

%Y-%m-%d表示年月日,在datetime模块会详细介绍。

a = time.strptime('2017/7/6', '%Y/%m/%d')
b = time.strftime('%Y-%m-%d', time.localtime())print(a)print(b)
로그인 후 복사
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=6, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=187, tm_isdst=-1)
2017-07-06
로그인 후 복사

测量程序的运行时间

使用时间戳可以方便地计时一段程序地运行时间

start_time = time.time()sum = 0for i in range(10000000):sum += 1end_time = time.time()print(end_time - start_time)
로그인 후 복사
2.185124397277832
로그인 후 복사

可以看到执行循环计算加法一千万次,那段程序花了2秒多。

也可以使用time.clock()函数

start = time.clock()print(start)  # 2.6773594453225194e-06time.sleep(2)
end = time.clock()print(end - start)  # 差值代表了睡眠2秒的时间。2.000246763295544time.sleep(3)print(time.clock())  # 5.00058991153112,返回的是从第一次调用到这次调用的时间间隔
로그인 후 복사
4.4622657422041984e-07
2.0026006084745567
5.013243112269714
로그인 후 복사

可以看到clock第一次调用时比较奇怪,它返回的是进程运行的时间。之后再次调用都是与第一次调用clock的值的差了。即从第一次调用开始算起,到当前调用clock所经历的时间。
像上面一样,在想测试的一部分代码的上方设置start,结束的地方设置end,相减也能得到片段代码运行时间,而且比time.time()还要准确。

datetime

datetime模块用来管理日期和时间,其中有三个子模块。分别是time、date、datetime,所以想要使用datetime可以使用下面的导入方式。

from datetime import datetime# 返回当前时间now = datetime.now()print(now.year, now.month, now.microsecond)# 可以自定义参数,返回格式化后的时间dt = datetime(2017, 10, 1, 23, 59, 59, 456123)print(dt)
로그인 후 복사
2017 7 719609
2017-10-01 23:59:59.456123
로그인 후 복사

datetime接受7个参数,分别对应年、月、日、时、分、秒、微秒。分别保存在datetime的year、month、day、hour、minute、second、microsecond属性中。

由时间戳可以转换成datetime类型。如下,使用当前时间的时间戳。实际上等效于datetime.now()。当然反过来由datetime得到时间戳也是可以的。

# 时间戳转datetimenow = datetime.fromtimestamp(time.time())print(now)
sometime = datetime(2017, 7, 5, 23, 59, 59)# datetime转时间戳print(sometime.timestamp())
로그인 후 복사
2017-07-06 09:46:07.903769
1499270399.0
로그인 후 복사

这些datetime对象可以使用><=

dt1 = datetime(2017, 5, 31)
dt2 = datetime(2017, 4, 1)print(dt1 - dt2)print(dt1 > dt2)
로그인 후 복사
60 days, 0:00:00
True
로그인 후 복사
위의 부동 소수점 숫자를

UNIX 에포크 타임스탬프라고 하며, 이는 1970년 1월 1일 0시부터 오늘까지 경과된 초 수입니다.

끝에 소수점 이하 6자리가 있는 것을 볼 수 있습니다. round 함수를 사용하면 부동 소수점 숫자를 반올림할 수 있습니다. 다음과 같이

import datetime

delta = datetime.timedelta(weeks=2, days=7, hours=1, seconds=59,microseconds=234353)
delta1 = datetime.timedelta(days=5, hours=2)print(delta.seconds)  # 返回属性hours和seconds的和print(delta.total_seconds()) # 只是以秒来表示这段时间print(delta > delta1)print(delta + delta1)
로그인 후 복사
3659
1818059.234353
True
26 days, 3:00:59.234353
로그인 후 복사
로그인 후 복사
time.sleep(sec)를 사용하면 현재 Sleep을 설정할 수 있으며, 매개변수로 초(s)를 입력합니다. 🎜🎜
from datetime import datetime

a = datetime.strptime(&#39;2017/7/6&#39;, &#39;%Y/%m/%d&#39;)
b = datetime.now().strftime(&#39;%Y-%m-%d&#39;)print(a)print(b)
로그인 후 복사
로그인 후 복사
🎜
2017-07-06 00:00:00
2017-07-06
로그인 후 복사
로그인 후 복사
🎜다른 함수 사용하기🎜🎜rrreee🎜rrreee🎜 이것이 튜플 유형임을 알 수 있습니다. 중국의 시간대는 tm_hour를 제외하고는 찾을 수 있습니다. 다릅니다(다릅니다(정확히 +8). 나머지는 동일합니다. 🎜🎜다음 함수는 형식이 지정된 날짜와 시간을 반환할 수 있어 더욱 직관적입니다. 🎜🎜rrreee🎜rrreee
  • 🎜ctime()은 🎜timestamp🎜를 전달할 수 있습니다. 매개변수가 지정되지 않으면 현재 타임스탬프가 사용됩니다. 기본적으로 매개변수로 사용됩니다. 즉, time.time()🎜
  • 🎜gtime()은 🎜struct_time🎜을 전달할 수 있습니다. 기본적으로 시간이 사용됩니다. 즉, time.localtime()🎜

struct_time이 문자열로 변환되고 해당 문자열이 struct_time으로 변환됩니다.

  • 🎜strptime의 첫 번째 매개변수는 문자열 형식의 날짜이고, 두 번째 매개변수는 사용자 정의 날짜 변환 형식입니다. 이 두 매개변수의 형식은 일치해야 합니다. 예를 들어, time.strptime('2017/7/6', '%Y-%m-%d')가 슬래시를 사용하고 다른 하나에 대시를 사용하면 오류는 다음과 같습니다. 보고되었습니다. 이 함수는 struct_time을 반환합니다🎜
  • 🎜strftime의 첫 번째 매개변수는 변환하려는 날짜 형식이고 두 번째 매개변수는 struct_time입니다. 이 함수는 struct_time의 튜플 형식을 첫 번째로 변환합니다. 매개변수에 지정된 형식은 변환된 날짜 문자열 형식입니다. 🎜
🎜%Y-%m-%d는 연도, 월, 일을 나타내며, datetime 모듈에서 자세히 소개됩니다. 🎜🎜rrreee🎜rrreee

프로그램의 실행 시간 측정

🎜타임스탬프를 사용하면 프로그램의 실행 시간을 편리하게 측정할 수 있습니다.🎜🎜rrreee🎜rrreee🎜루프 계산 추가가 천만 번 실행되는 것을 볼 수 있습니다 , 해당 구간에서 절차가 2초 이상 소요되었습니다. 🎜🎜time.clock() 함수를 사용해도 됩니다🎜🎜rrreee🎜rrreee🎜처음 호출하면 시계가 이상하다는 걸 알 수 있죠, 🎜 프로세스 실행 시간 🎜을 반환합니다. 모든 후속 호출은 clock에 대한 첫 번째 호출 값과 다릅니다. 즉, 첫 번째 호출부터 clock에 대한 현재 호출까지 경과된 시간입니다. 🎜위처럼 테스트하려는 코드 부분 위에 start를 설정하고, 끝 부분에 end를 설정하면 이를 빼서 조각 코드의 실행 시간을 얻을 수도 있으며 시간보다 더 정확합니다. 시간(). 🎜🎜datetime🎜🎜datetime 모듈은 날짜와 시간을 관리하는 데 사용되며 세 개의 하위 모듈이 있습니다. time, date, datetime이므로 datetime을 사용하려면 다음 가져오기 방법을 사용하면 됩니다. 🎜🎜rrreee🎜rrreee🎜datetime은 연도, 월, 일, 시, 분, 초, 마이크로초에 해당하는 7개의 매개변수를 허용합니다. 날짜/시간의 연도, 월, 일, 시, 분, 초, 마이크로초 속성에 각각 저장됩니다. 🎜🎜타임스탬프는 날짜/시간 유형으로 변환될 수 있습니다. 다음과 같이 현재 시간의 타임스탬프를 사용합니다. datetime.now()와 사실상 동일합니다. 물론, datetime에서 타임스탬프를 얻는 것도 가능합니다. 🎜🎜rrreee🎜rrreee🎜 이러한 날짜/시간 개체는 ><= 기호를 사용하여 두 날짜의 순서를 비교할 수 있습니다. 두 순간의 차이를 표현하기 위해 빼기 연산을 수행할 수도 있습니다. 예를 들어 🎜🎜rrreee🎜rrreee🎜timedelta는 기간을 의미합니다.🎜🎜순간이 아니라 기간을 의미합니다. 🎜🎜rreee🎜
3659
1818059.234353
True
26 days, 3:00:59.234353
로그인 후 복사
로그인 후 복사

timedelta的接受的参数有weeks、days、hours、minutes、seconds、microseconds,但是其属性却只有days、seconds、microseconds。并且除了像datetime一样支持大小比较、减法运算外,还可以进行加法运算,表示两个时间段的差值

将datetime转化为字符串形式及字符串转为datetime对象

time模块也有这两个函数(见上面的例子),使用上比较累类似。

  • strptime按照指定格式将字符串形式的日期转换成datetime对象并返回。

  • strftime将一个datetime对象(比如now)根据指定的格式转换成字符串并返回。

from datetime import datetime

a = datetime.strptime(&#39;2017/7/6&#39;, &#39;%Y/%m/%d&#39;)
b = datetime.now().strftime(&#39;%Y-%m-%d&#39;)print(a)print(b)
로그인 후 복사
로그인 후 복사
2017-07-06 00:00:00
2017-07-06
로그인 후 복사
로그인 후 복사

关于日期时间的格式,看下表。

格式指令 含义
%Y 带世纪的四位年份,如2017
%y 后两位年份,如17表示2017
%m 月份,从01到12
%B 完整的月份,如November
%b 月份的简写,如Nov
%d 一个月中的第几天,如从01到31(如果有的话)
%j 一年中的第几天
%w 一周中的第几天
%A 完整的周几,如Monday
%a 简写的周几,如Mon
%H 24小时制的小时00-23
%h 12小时制的小时01-12
%M 分,00-59
%S 秒,00-59
%p AM或者PM

위 내용은 Python의 시간 및 날짜/시간 모듈에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿