삶과 일에서 우리 각자는 매일 시간을 다룹니다.
아침에 언제 일어나나요?
지하철이 도착하는 데 몇 분 정도 걸리나요?
정오부터 점심시간은 언제 시작되나요?
내일은 무슨 요일인가요?
옷을 산지 2달이나 됐나요?
상사가 코드에 예약된 작업 기능을 추가해달라고 요청했는데 어떻게 해야 하나요?
다양한 상황에서는 다양한 시간 문제가 발생합니다. 특정 시점, 시간 간격, 요일 등 우리는 항상 시간과 충돌합니다. 이 글에서는 Python을 사용하여 시간 관련 클래스, 해당 메서드 및 속성을 자세히 설명합니다.
시간 관련 함수에 대한 형식적인 설명에서 이전 그러려면 먼저 Timestamp라는 개념이 있어야 합니다. 이 문서에서는 특히 unix
타임스탬프를 참조합니다.
타임스탬프 타임스탬프는 로컬 데이터 업데이트 순서가 원격 데이터와 일치하도록 일련의 데이터에 시간, 날짜 등과 같은 식별 텍스트를 추가하는 것을 의미합니다.
unix
타임스탬프는 윤초에 관계없이 1970년 1월 1일(자정 UTC/GMT) 이후 경과된 초 수입니다. 1970-01-01은 MySQL의 시간이 비어 있을 때 빈 타임스탬프를 변환한 후 얻는 시간인 경우가 많습니다. 1시간은 3600초 형식의 UNIX 타임스탬프로 표현되고, 1일은 86400초의 UNIX 타임스탬프로 표현되며 윤초는 계산되지 않습니다. 구체적인 비교표는 다음과 같습니다. unix
时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。1970-01-01就是经常我们在MySQL中时间为空的时候,转化空的时间戳之后得到的时间。一个小时表示为UNIX时间戳格式为:3600秒;一天表示为UNIX时间戳为86400秒,闰秒不计算。具体的对照表如下:
下面介绍几个时间戳和具体时间之间相互转化的网站:
1、站长工具:https://tool.chinaz.com/tools/unixtime.aspx
2、在线工具:https://tool.lu/timestamp/
3、Json在线解析:https://www.sojson.com/unixtime.html
4、Unix时间戳在线转换(菜鸟工具):https://c.runoob.com/front-end/852
5、北京时间(时间与时间戳互换工具):http://www.beijing-time.org/shijianchuo/
介绍完时间戳的基本知识,下面重点讲解3个与时间和日期相关的Python库:
calendar
time
datetime
calendar
1. 웹마스터 도구: https://tool.chinaz.com/tools/unixtime.aspx
🎜2. 온라인 도구: https://tool.lu/timestamp/🎜🎜3. ://www.sojson.com/unixtime.html🎜🎜4. Unix 타임스탬프 온라인 변환(루키 도구): https://c.runoob.com/front-end/852🎜🎜5. 교환 도구): http://www.beijing-time.org/shijianchuo/🎜🎜타임스탬프에 대한 기본 지식을 소개한 후 시간 및 날짜와 관련된 세 가지 Python 라이브러리에 집중해 보겠습니다. 🎜🎜calendar🎜🎜
🎜time🎜🎜
🎜datetime🎜🎜 li>
캘린더
의 중국어 의미는 "캘린더"이므로 실제로는 특히 달력 형태로 날짜에 적합합니다. 🎜🎜🎜2.1 모듈 내용🎜🎜🎜🎜🎜🎜다음은 예입니다.🎜기본 매개변수를 사용하여 다가오는 2020년의 달력을 표시합니다:
import calendar year = calendar.calendar(2020) print(year)
매개변수를 변경하고 다시 표시합니다:
year = calendar.calendar(2020,w=3,l=1,c=8) print(year)
우리가 찾았어요 전체 달력 변경 폭이 더 넓어지고, 주도 3글자로 영어로 표시됩니다. 세 매개변수의 의미를 설명해 주세요.
c: 월 간격 거리
w: 일 폭 간격
l: 주당 라인 수
각 라인의 길이: 21*w+18+2*c
, 라인당 3개월
마지막으로 다가오는 2021년 달력을 살펴보세요:
이 함수의 기능은 특정 연도가 윤년인지를 판별하는 것입니다. 그렇다면 True를 반환하고, 그렇지 않으면 False를 반환합니다.
평년은 4로 나눌 수 있지만 100으로 나눌 수 없기 때문에 보통 윤년이라고 합니다.
년은 백 단위이고 400으로 나누어야 합니다. 이를 세기 윤년이라고 합니다
몇 년의 윤년 이 2년 사이에 있는지 결정합니다. y1은 포함하지만 y2는 포함하지 않습니다. Python 슬라이싱의 와 유사합니다(머리는 포함하지만 꼬리는 포함하지 않음)
이 함수는 연도
연도< 코드 스타일= "글꼴 크기: 상속; 줄 높이: 상속; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 색상: rgb(233, 105, 0); 배경: rgb (248, 248, 248);">월월별 달력에는 제목이 매주 한 줄씩 두 줄만 있습니다. 일일 간격 너비는 w 자이고 각 줄의 길이는 7*w + 6
, 여기서 l은 주당 줄 수year
年的month
月的日历,只有两行标题,一周一行。每日间隔宽度为w个字符,每行的长度为7*w + 6
,其中l是每星期的行数
首先看看默认效果;
接下来我们改变w和l两个参数:
1、改变w
,我们发现星期的表示变成了3个字母;同时每天之间的间隔变宽了(左右间隔)
2、改变参数l
w
, 주를 표현하는 것이 3 글자가 된 것을 발견했습니다. 날이 넓어졌습니다(왼쪽 및 오른쪽 간격)2. 매개변수l
, 매주 전의 간격(상위 및 하위)이 더 넓어지는 것을 발견했습니다
2.6monthcalendar(년,월)
이달의 날짜가 없으면 0으로 표시됩니다. 각 하위 리스트는 주의 1일부터 시작하며 그 특징을 요약하면 다음과 같습니다.
각 하위 리스트는 한 주를 나타냅니다.
월요일부터 일요일까지 이번 달에 표시되지 않는 날짜는 다음으로 대체됩니다. 0
🎜2020년 12월을 예로 들어보겠습니다. 🎜🎜🎜🎜🎜위 달력과 비교하면 다음과 같습니다. 🎜12월에는 0이 표시되는 위치가 표시되지 않습니다🎜🎜🎜3월 달력을 살펴보겠습니다. 2020: 🎜이 함수에서 반환된 결과는 튜플입니다. 튜플에는 두 개의 값이 있습니다(a,b)
값 a는 날짜를 나타냅니다. 6은 일요일을 나타내고 값은 0~6이라고 규정되어 있습니다
값 b는 해당 달의 총 일 수를 나타냅니다
예를 통해 설명하겠습니다. , 2020년 12월을 예로 들어 보겠습니다.
결과의 1은 12월이 주의 2일(0-6, 6은 일요일을 나타냄)에 시작하고 해당 달의 총 일수는 31일임을 의미합니다
주중 방법은 연도, 월, 일을 입력하는 것입니다. 그런 다음 해당 요일을 알 수 있습니다. 반환 값은 0-6이며, 0은 월요일을 나타냅니다. , 6은 일요일을 나타냅니다
12월 12일을 예로 들어 설명하겠습니다.
Double 12 토요일이고 반환된 결과는 5입니다. 5는 토요일을 나타내며 이는 정확히 일치합니다.
time 모듈은 시간 함수와 관련하여 가장 일반적으로 사용되는 모듈입니다. Python의 시간 관련 요구 사항에서 자주 사용됩니다. 아래.
먼저 모듈의 전반적인 용도를 살펴보겠습니다
time.time()
은 현재 시간을 가져오는 것입니다. 보다 엄밀하게 말하면현재 시간의 타임스탬프. time.time()
是获取当前的时间,更加严格地说,是获取当前时间的时间戳。
再次理解时间戳:它是以1970年1月1日0时0份0秒为计时起点,计算到当前的时间长度(不考虑闰秒)
time.localtime
是打印当前的时间,得到的结果是时间元组,具体含义:
笔记:结果是时间元组
time.localtime
的参数默认是time.time()
타임스탬프를 다시 이해하세요. 1970년 1월 1일 0:00:00부터 시작하여 현재 시간 길이까지 계산됩니다(윤초를 고려하지 않음)
3.3localtime
참고: 결과 시간 튜플입니다
time.localtime의 기본 매개변수
는 time.time()
타임스탬프를 입력할 수 있습니다. 해당 시간을 가져오는 특정 타임스탬프🎜🎜🎜🎜🎜기본 현재 타임스탬프🎜🎜🎜🎜🎜🎜타임스탬프 지정🎜🎜localtime()
결과는현지 시간, 국제화가 필요한 경우 gmtime()
, 그리니치 표준시를 사용하는 것이 가장 좋습니다. localtime()
得到的是本地时间,如果需要国际化,使用gmtime()
,最好是使用格林威治时间。
格林威治标准时间:位于英国伦敦郊区的皇家格林威治天文台的标准时间,本初子午线经过那里。
time.asctime
的参数为空时,默认是以time.localtime的值为参数,得到当前的日期、时间、星期;另外,我们也可以自己设置参数,参数是时间元组
使用当前时间的默认时间元组localtime
自己指定一个时间元组
获取当前时间的具体时间和日期:
ctime
time.asctime 매개변수
가 비어 있으면 기본값은time.localtime 값을 매개변수로 사용하여 현재 날짜, 시간 및 주를 가져옵니다. 또한 매개변수를 직접 설정할 수도 있습니다. 매개변수는 시간 튜플입니다🎜🎜현재 시간의 기본값을 사용합니다. 시간 튜플 localtime🎜🎜🎜
🎜지정 시간 튜플을 직접 만들어 보세요🎜🎜🎜 🎜🎜🎜🎜특정 시간과 날짜 가져오기 현재 시간: 🎜🎜🎜🎜🎜3.6ctime🎜🎜🎜ctime
의 매개변수는 기본적으로 타임스탬프입니다. 그렇지 않은 경우 타임스탬프를 지정할 수도 있습니다🎜
mktime()
도 시간 튜플을 매개변수로 사용하고 타임스탬프를 반환합니다. 동등현지 시간의 역순
프로세스 : mktime()
也是以时间元组为参数的,它返回的是时间戳,相当于是localtime
的逆向过程:
strftime()
是按照我们指定的格式将时间元组转化为字符串;如果不指定时间元组,默认是当前时间localtime()
。常用到的时间格式见下表:
我们举例说明:
字符串中的分隔符我们可以任意指定
可以同时显示年月日时分秒等
strptime()
3.8strftime
< 코드 스타일="글꼴 크기: 상속; 줄 높이: 상속; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 색상: rgb(233, 105, 0); 배경 : rgb(248, 248, 248);">strftime()은 우리가 지정한 형식입니다시간 튜플을 문자열로 변환; 시간 튜플이 지정되지 않은 경우 기본값은 현재 시간localtime()
. 일반적으로 사용되는 시간 형식은 아래 표에 나와 있습니다. 예를 들어보세요:
🎜🎜🎜문자열에 구분 기호를 임의로 지정할 수 있습니다🎜🎜🎜🎜🎜🎜 연도, 월, 일, 시, 분, 초 등을 동시에 표시할 수 있습니다🎜🎜🎜 ul>🎜🎜🎜🎜3.9strptime🎜🎜🎜strptime()
문자열을 시간 튜플로 변환하는 것입니다. 특히 주의해야 할 것은 두 개의 매개변수가 있다는 것입니다: 🎜🎜🎜🎜🎜 Converted🎜🎜🎜🎜🎜🎜시간 문자열에 해당하는 형식은 위에 🎜🎜 표에 언급된 형식인가요?time
모듈은 이미 많은 문제를 해결할 수 있지만 실제 작업 및 비즈니스 요구 사항에서는 보다 편리하고 빠르게 사용할 수 있도록 더 많은 도구가 필요합니다. datetime
은 매우 유용한 모듈 중 하나입니다. <코드 스타일="글꼴 크기: 상속; 줄 높이: 상속; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 색상: rgb(233, 105, 0) ;배경: rgb(248, 248, 248);">datetime 모듈에서 일반적으로 사용되는 여러 클래스는 다음과 같습니다: time
模块已经能够解决很多的问题,但是实际工作和业务需求中需要更多的工具,让我们使用起来更方便和快捷,datetime
便是其中一个很好用的模块。datetime
模块中几个常用的类如下:
date
:日期类,常用属性:year/month/day
time
:时间类,常用属性:hour/minute/second/microsecond
datetime
:日期时间类
timedelta
:时间间隔,即两个时间点之间的时间长度
tzinfo
날짜
: 날짜 클래스, 공통 속성: 연도/월/일</code ></p> 🎜<li style="글꼴 크기: 상속;색상: 상속;줄 높이: 상속;마진 바닥: 0.5em;"><p><코드 스타일="글꼴 크기: 상속;줄 높이 : 상속; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 색상: rgb(233, 105, 0); 배경: rgb(248, 248, 248);"> time< /code>: 시간 클래스, 일반적으로 사용되는 속성: <code style="font-size: 상속;line-height: 상속;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left : 2px; 색상: rgb(233, 105, 0);배경: rgb(248, 248, 248);">시/분/초/마이크로초
🎜🎜datetime
: 날짜 및 시간 클래스🎜🎜< li 스타일=" 글꼴 크기: 상속; 색상: 상속; 줄 높이: 상속; 여백-하단: 0.5em;">
<코드 스타일="글꼴 크기: 상속; 줄 높이: 상속;패딩 : 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 색상: rgb(233, 105, 0); 배경: rgb(248, 248, 248);">timedelta: 시간 간격, 즉 두 시점 사이의 시간 길이🎜🎜
<코드 스타일= "글꼴 크기: 상속; 줄 높이: 상속; 패딩: 2px 4px; 테두리 반경: 4px; 여백 오른쪽: 2px; 여백 왼쪽: 2px; 색상: rgb(233, 105, 0 );배경: rgb (248, 248, 248);">tzinfo: 시간대 클래스🎜
首先我们引入date
类,并创建一个日期对象:
1、然后我们可以操作这个日期对象的各种属性:后面加上()
print("当前日期:",today) # 当前日期 print("当前日期(字符串):",today.ctime()) # 返回日期的字符串 print("时间元组信息:",today.timetuple()) # 当前日期的时间元组信息 print("年:",today.year) # 返回today对象的年份 print("月:",today.month) # 返回today对象的月份 print("日:",today.day) # 返回today对象的日 print("星期:",today.weekday()) # 0代表星期一,类推 print("公历序数:",today.toordinal()) # 返回公历日期的序数 print("年/周数/星期:",today.isocalendar()) # 返回一个元组:一年中的第几周,星期几 # 结果显示 当前日期: 2020-12-25 当前日期(字符串):Fri Dec 25 00:00:00 2020 时间元组信息:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=360, tm_isdst=-1) 年: 2020 月: 12 日: 25 星期: 4 公历序数: 737784 年/周数/星期: (2020, 52, 5)
2、date类中时间和时间戳的转换:
具体时间的时间戳转成日期:
3、格式化时间相关,格式参照time模块中的strftime方法
from datetime import datetime, date, time today = date.today() print(today) # 2020-12-26 默认连接符号是- print(today.strftime("%Y/%m/%d")) # 指定连接符 # 2020/12/26 print(today.strftime("%Y:%m:%d")) # 2020:12:26 print(today.strftime("%Y/%m/%d %H:%M:%S")) # 转化为具体的时间 # 2020/12/26 00:00:00
4、修改日期使用replace
方法
time
类也是要生成time
对象,包含hour、minute、second、microsecond
,我们还是通过例子来学习:
from datetime import time t = time(10,20,30,40) print(t.hour) # 时分秒 print(t.minute) print(t.second) print(t.microsecond) # 微秒 # 结果 10 20 30 40
datetime类包含date类和time类的全部信息,下面?是类方法相关的:
from datetime import datetime print(datetime.today()) print(datetime.now()) print(datetime.utcnow())# 返回当前UTC日期和时间的datetime对象 print(datetime.fromtimestamp(1697302830)) # 时间戳的datetime对象 print(datetime.fromordinal(699000) ) print(datetime.combine(date(2020,12,25), time(11,22,54))) # 拼接日期和时间 print(datetime.strptime("2020-12-25","%Y-%m-%d")) # 结果 2020-12-25 23:24:42.481845 2020-12-25 23:24:42.482056 2020-12-25 15:24:42.482140 2023-10-15 01:00:30 1914-10-19 00:00:00 2020-12-25 11:22:54 2020-12-25 00:00:00
再看看相关对象和属性相关:
from datetime import datetime d = datetime(2020,12,25,11,24,23) print(d.date()) print(d.time()) print(d.timetz()) # 从datetime中拆分出具体时区属性的time print(d.replace(year=2021,month=1)) # 替换 print(d.timetuple()) # 时间元组 print(d.toordinal()) # 和date.toordinal一样 print(d.weekday()) print(d.isoweekday()) print(d.isocalendar()) print(d.isoformat()) print(d.strftime("%Y-%m-%d :%H:%M:%S")) # 结果 2020-12-25 11:24:23 11:24:23 2021-01-25 11:24:23 time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=11, tm_min=24, tm_sec=23, tm_wday=4, tm_yday=360, tm_isdst=-1) 737784 4 5 (2020, 52, 5) 2020-12-25T11:24:23 2020-12-25 :11:24:23
timedelta
对象表示的是一个时间段,即两个日期date
或者日期时间datetime
之间的差;支持参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds
本地时间指的是我们系统本身设定时区的时间,例如中国处于北京时间,常说的东八区UTC+8:00
。datetime
类有一个时区属性tzinfo
。
tzinfo
是一个关于时区信息的类,是一个抽象的基类,不能直接被实例化来使用。它的默认值是None
,无法区分具体是哪个时区,需要我们强制指定一个之后才能使用。
因为本身系统的时区刚好在中国处于东八区,所以上述代码是能够正常运行的,结果也是OK的。那如果我们想切换到其他时区的时间,该如何操作呢?这个时候我们需要进行时区的切换。
1、我们先通过utcnow()
获取到当前的UTC时间
utc_now = datetime.utcnow().replace(tzinfo=timezone.utc) # 指定utc时区 print(utc_now) # 结果 2020-12-26 01:36:33.975427+00:00
2、通过astimezone()
将时区指定为我们想转换的时区,比如东八区(北京时间):
# 通过astimezone切换到东八区 beijing = utc_now.astimezone(timezone(timedelta(hours=8))) print(beijing) # 结果 2020-12-26 09:36:33.975427+08:00
用同样的方法切到东九区,东京时间:
# UTC时区切换到东九区:东京时间 tokyo = utc_now.astimezone(timezone(timedelta(hours=9))) print(tokyo) # 结果 2020-12-26 10:36:33.975427+09:00
还可以直接从北京时间切换到东京时间:
# 北京时间(东八区)直接切换到东京时间(东九区) tokyo_new = beijing.astimezone(timezone(timedelta(hours=9))) print(tokyo_new) # 结果 2020-12-26 10:36:33.975427+09:00
下面介绍几个工作中用到的时间转化小技巧:
时间戳转日期
日期转时间戳
格式化时间
指定格式获取当前时间
时间戳转成具体时间,我们需要两个函数:
time.localtime
:将时间戳转成时间元组形式
time.strftime
:将时间元组数据转成我们需要的形式
import time now_timestamp = time.time() # 获取当前时间的时间戳 # 时间戳先转成时间元组,strftime在转成指定格式 now_tuple = time.localtime(now_timestamp) time.strftime("%Y/%m/%d %H:%M:%S", now_tuple) # 结果 '2020/12/26 11:19:01'
假设我们指定一个具体的时间戳来进行转换:
import time timestamp = 1608852741 # 指定时间戳 a = time.localtime(timestamp) # 获得时间元组形式数据 print("时间元组数据:",a) time.strftime("%Y/%m/%d %H:%M:%S", a) # 格式化 # 结果 时间元组数据:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=25, tm_hour=7, tm_min=32, tm_sec=21, tm_wday=4, tm_yday=360, tm_isdst=0) '2020/12/25 07:32:21'
如果我们不想指定具体的格式,只想获取时间戳对应的时间,直接通过time.ctime
即可:
import time time.ctime(1608852741) # 结果 'Fri Dec 25 07:32:21 2020'
日期时间转成时间戳格式,我们需要使用两个方法:
strptime()
:将时间转换成时间数组
mktime()
:将时间数组转换成时间戳
通过具体的案例来学习一下:
date = "2020-12-26 11:45:34" # 1、时间字符串转成时间数组形式 date_array = time.strptime(date, "%Y-%m-%d %H:%M:%S") # 2、查看时间数组数据 print("时间数组:", date_array) # 3、mktime时间数组转成时间戳 time.mktime(date_array) # 结果 时间数组:time.struct_time(tm_year=2020, tm_mon=12, tm_mday=26, tm_hour=11, tm_min=45, tm_sec=34, tm_wday=5, tm_yday=361, tm_isdst=-1) 1608954334.0
工作需求中有时候给定的时间格式未必是我们能够直接使用,所以可能需要进行格式的转换,需要使用两个方法:
strptime()
:将时间转换成时间数组
strftime()
:重新格式化时间
通过案例来进行学习:
import time old = "2020-12-12 12:28:45" # 1、转换成时间数组 time_array = time.strptime(old, "%Y-%m-%d %H:%M:%S") # 2、转换成新的时间格式(20201212-20:28:54) new = time.strftime("%Y%m%d-%H:%M:%S",time_array) # 指定显示格式 print("原格式时间:",old) print("新格式时间:",new) # 结果 原格式时间: 2020-12-12 12:28:45 新格式时间: 20201212-12:28:45
为了能够获取到指定格式的当前时间,我们分为3个步骤:
time.time()
:获取当前时间
time.localtime()
:转成时间元组
time.strftime()
:重新格式化时间
通过一个案例来学习:
# 1、时间戳 old_time = time.time() # 2、时间元组 time_array = time.localtime(old_time) # 3、指定格式输出 new_time = time.strftime("%Y/%m/%d %H:%M:%S", time_array) print(new_time) # 结果 2020/12/26 11:56:08
本文通过各种案例详细介绍了Python
中关于时间输出和转化的3个模块:calendar、time、datetime
,最后总结了4个工作中常用的时间转化技巧,希望对大家掌握Python中的时间输出和转化有所帮助,不再被时间困扰。
위 내용은 한 번에 배울 수 있는 파이썬 시간 변환 요약(완전완전)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!