>시스템 튜토리얼 >리눅스 >Python 시간 처리에 대한 전체 요약

Python 시간 처리에 대한 전체 요약

PHPz
PHPz앞으로
2024-01-26 08:06:16460검색

Python 시간 처리에 대한 전체 요약

1.개요

datetime 모듈은 주로 날짜(연, 월, 일, 시, 분, 초)를 나타내는 데 사용됩니다. 달력 모듈은 주로 연, 월, 일, 요일 및 기타 정보를 나타내는 데 사용됩니다. 시간 모듈은 주로 시, 분, 초에 중점을 두고 있으며, 대략적인 기능적 관점에서 보면 이 세 가지가 각각 하나의 영역에 초점을 맞춰 상호보완적인 관계에 있다고 생각할 수 있습니다. 사용자가 다양한 목적에 따라 적합한 모듈을 선택하는 것이 편리합니다.

2. 시간 모듈부터 시작해 보겠습니다. 시간 모듈을 배우려면 먼저 몇 가지 시간 관련 개념을 알아야 합니다.

(1)시대 시간을 1,000,000밀리초와 같은 밀리초 단위로 표현하고 싶다고 가정해 보겠습니다. 그러면 1,000,000밀리초의 시작점, 즉 우리의 시간 기준점은 무엇입니까? 예를 들어, 당신의 키가 1.8미터라고 하면, 이 높이는 당신이 서 있는 땅의 높이를 의미합니다. 이 시간 기준점은 Unix 시스템에서 1970년 1월 1일 0시를 기준으로 합니다.

(2)GMT, UTC 위에서 epoch는 1970년의 시작점을 나타낸다고 했는데, 그렇다면 이 1970년은 어느 기준시점을 기준으로 하는 것일까요? 일반적으로 GMT(그리니치 표준시)라고도 하고 UTC(협정 세계시)라고도 하는 그리니치 시간을 기준으로 합니다. 시간축에 두 가지 이름이 있는 이유는 무엇입니까? 역사적으로 GMT가 먼저 오고 UTC가 그 다음입니다.

UTC는 현재 우리가 사용하는 시간 표준이고, GMT는 예전 시간 측정 표준입니다. UTC는 원자시계를 기준으로 시간을 계산하고, GMT는 지구의 자전과 공전을 기준으로 시간을 계산합니다.

즉, UTC를 실제 기준시간으로 간주할 수 있으며 UTC와 GMT의 편차는 0입니다.

실제로 우리 컴퓨터에는 UTC 시간을 실시간으로 기록하는 하드웨어 모듈 RCT가 있습니다. 이 모듈은 별도의 배터리로 구동되며 전원이 꺼져도 영향을 받지 않습니다.

epoch의 시간 기준과 UTC의 기준을 사용하면 시간을 정확하게 표현할 수 있습니다.

(3)DST, tzone 시간을 정확하게 표현할 수는 있지만, 대부분의 경우 지역의 실제 상황에 따라 시간을 조정해야 합니다. 가장 일반적인 것은 모두가 익숙하다고 생각하는 시간대입니다.

이 때, 5시 5분이라는 시간을 말할 때 시간을 정확하게 표현하려면 해당 시간대에 5시 5분을 추가해야 합니다.

또 다른 시간 조정은 DST입니다.

DST는 일광 절약 시간(Daylight Saving Time)을 의미합니다. 즉, 햇빛을 최대한 활용하고 전력 소비를 줄이기 위해 시간을 인위적으로 조정하며, 이는 다양한 국가 및 지역의 정책과 규정에 따라 달라집니다. 예를 들어, 겨울에는 7시에 일어나고 여름에는 6시에 일어난다면, 여름이 오면 인위적으로 1시간을 더해 일어난다. 7시인데 실제로는 한 시간 더 빠르다.

그러므로 궁금한 분들을 위해 Python은 tzone과 DST의 값을 어떻게 알 수 있는지 물어봐야 합니다. 대답은 환경 변수를 통해서입니다.

여기에서는 Linux를 예로 들어 설명하겠습니다.

Linux에는 TZ 환경 변수가 있으며 그 값은 다음과 유사합니다.

CST+08EDT, M4.1.0, M10.5.0 이 문자열은 다음과 같이 해석할 수 있으며 공백으로 구분하여 세 부분으로 나눕니다

CST+08 EDT, M4.1.0,M10.5.0

첫 번째 부분의 CST는 시간대 이름을 나타내며, 이는 중국 표준시로, +8은 베이징 시간을 의미하고 8시간은 UTC 시간입니다

두 번째 부분 EDT는 DST의 이름을 나타냅니다. 국가와 지역마다 정책과 규정이 다르기 때문에 DST가 다르다고 합니다. EDT 뒤에도 CST처럼 시간 조정 값이 올 수 있지만 우리나라에는 시간만 있습니다. 1986년부터 1992년까지의 조정값 DST는 2015년에 일정 기간 시행되었으나 현재는 폐지되었으므로 추후에 조정시간을 추가할 필요가 없습니다.

세 번째 부분은 DST 구현의 시작 및 종료 시간을 나타내며 자세한 설명은 생략하겠습니다.

(4) 시간 표현, 획득, 변환

time 모듈에서 시간을 가져오는 기본 방법은

으아아아

UTC 시간을 사용하여 epoch부터 현재까지의 초 수(부동 소수점 숫자로 표시)를 반환합니다.

우리는 당연히 이 초를 연, 월, 일, 시, 분, 초의 형태로 변환하려고 하는데, 이 변환은 두 가지 유형으로 나뉘는데, 하나는 여전히 UTC 시간을 사용하는 것이고, 다른 하나는 조정된 시간을 사용하는 것입니다. 우리 시간대에는요.

시간 모듈은 두 가지 방법을 제공합니다.

으아아아

둘 다 다음 속성을 가진 struct_time 클래스의 인스턴스를 반환합니다.

Python 시간 처리에 대한 전체 요약

초로 표현되는 시간과 비교하면 이 표현이 우리가 이해하기에 더 적합합니다.

이 두 함수가 매개변수 전달 없이 호출되면 내부적으로 time.time()을 호출하고 반환된 초를 변환에 사용합니다.

반대로, Python은 이 두 struct_time을 초로 변환하는 메서드도 제공합니다.

calendar.timegm() 메서드는 UTC의 struct_time(gmtime의 반환 개체)을 epoch부터 시작하는 초 수로 변환하는 데 사용됩니다

time.mktime()은 타임존으로 조정된 struct_time(즉, localtime의 반환 객체) 객체를 epoch로부터 시작하는 초 수로 변환하는 데 사용됩니다

즉, mktime 메서드는 먼저 시스템에서 시간대와 DST 정보를 찾아 이 정보를 사용하여 struct_time을 조정한 다음 초로 변환합니다.

또 다른 일반적인 요구 사항은 시간과 시간을 나타내는 문자열 간의 변환입니다.

이를 위해 시간 모듈의 Strftime 및 strptime이 사용됩니다.

누구나 이름을 보면 그 의미를 알 수 있죠

strftime은 문자열 형식 시간으로, 시간을 문자열로 형식화하는 데 사용됩니다

strptime은 문자열을 시간으로 구문 분석하는 데 사용되는 문자열 구문 분석 시간입니다.

여기의 시간은 모두 struct_time 객체라는 점에 유의하세요.

시간 형식에 대해서는 아주 간단한 지식입니다. 공식 홈페이지 문서에서 내용을 빌려왔습니다.

Python 시간 처리에 대한 전체 요약

이 두 가지 함수 외에도 시간 모듈은 시간을 문자열로 변환하는 데 도움이 되는 두 가지 편리한 방법도 제공합니다

asctime은 아래와 같이 struct_time 객체를 표준 24자 문자열로 변환하는 데 사용됩니다.

일 6월 20일 23:21:05 1993

ctime 메소드는 초를 수신한다는 점만 제외하면 asctime과 동일한 기능을 가지고 있습니다. 먼저 localtime을 통해 초를 struct_time으로 변환한 다음 asctime과 동일하게 됩니다.

위는 시간 모듈의 핵심 내용입니다. 이러한 API를 기억하는 데 도움이 되는 공식을 사용하려고 합니다

으아아아

다음으로 datetime 모듈 학습을 시작하겠습니다.

3.datetime 모듈 (1) 개요

time 모듈은 시간을 얻고 표현하는 문제를 해결하고, datetime 모듈은 더 나아가 연, 월, 일, 시, 분, 초 정보를 시간으로 빠르게 얻고 조작하는 문제를 해결합니다.

간단히 말하면 이 모듈에는 세 가지 핵심 클래스가 있습니다. 날짜 클래스는 연도, 월, 일을 나타내고 시간 클래스는 시, 분, 초, 밀리초를 나타냅니다. . 징글은 이 상황을 기억하는 데 도움이 될 수 있습니다:

시간에는 시간이 없다

날짜/시간에 숨김

편집이 별로인가요? 글쎄요, 저도 그렇게 생각해요.

datetime 클래스는 날짜와 시간의 조합입니다.

한 가지 미리 설명할 것이 있습니다. time 클래스와 datetime 클래스 모두 속성이 있습니다. 해당 값은 시간 또는 날짜/시간의 시간대 정보를 포함하는 tzinfo 객체입니다. 인식하며, 에포크 이후의 초 단위로 정확하게 변환할 수 있습니다.

이 속성을 None으로 설정하면 시간 개체 또는 날짜/시간 개체에 시간대 정보가 없습니다. 특히 현지 시간을 나타내는지 UTC 시간을 나타내는지는 프로그램에서 직접 결정해야 합니다.

여기서 말하는 현지 시간은 우리 시간대의 시간을 의미하며, UTC 시간은 국제 표준시인 그리니치 표준시를 의미합니다. 아래도 마찬가지입니다.

날짜에는 시간대 정보가 없다는 점 기억해주세요.

(2)从创建datetime开始

创建datetime对象,我最常用的办法如下

dt=datetime.datetime.fromtimestamp(time.time())

以上,time.time()获得自epoch开始的秒数,fromtimestamp方法会将这个秒数转变成一个datetime对象。

这里有一个问题,这个datetime对象究竟是utc的还是local的?

答案是local的,这是该方法的默认行为。如果你在fromtimestamp方法中传入一个表示时区的参数,即tzinfo对象,就会按传入的时区信息进行转换。

获得表示当前local时间的datetime对象,还有两个简便方法

datetime. datetime. now()
datetime. datetime. today()

以上我们得到的都是local的datetime对象,如何获得utc的datetime对象呢?有两个办法

datetime. datetime. utcfromtimestamp()
datetime. datetime. utcnow()

我们还可以从字符串中创建datetime对象,

其内部还是先调用的time模块中的striptime方法,获取struct_time对象,再利用struct_time对象中的年月日时分秒信息构建datetime对象。

同样的,datetime类也提供了strftime(),asctime(),ctime()方法,相信不说你也知道是做什么的了。

datetime类还提供了一个combine方法,用来将一个date对象和一个time对象组合成一个datetime对象。

需要注意的是,datetime模块中出现timestamp时,一般可将其理解成time.time()返回的秒数

(3)date和time的创建

date对象的创建和datetime非常相似,

datetime. date. today()

datetime.date.fromtimestamp()都可以创建一个date对象。

当然,你也可以通过构造方法传入年月日来创建date对象。

相比之下,time对象的创建就很有限,只能通过

datetime.time([hour[, minute[, second[, microsecond[, tzinfo]]]]])

这个方法创建。

(4)以上三个对象的操作和timedelta类

在实际使用中,我们有一大块需求就是对日期进行比较和加减运算。得益于python的操作符重载能力,python中可以方便地对

date对象之间,或者datetime对象之间进行小于(

注意,这里仅限于同类对象之间,而且,不包括time对象之间。

两个date对象作减,或者两个datetime对象之间作减,差值用一个timedelta对象表示。

同理,一个date 对象或者datetime对象也可以加或者减一个timedelta对象。

一个timedelta对象含有三个属性:days,seconds, microseconds,days属性可以取负值,另外两个属性都只能是正值。

你可以用total_seconds()方法获得一个timedelta对象的秒数表示。

两个timedelta对象之间可加,可减,但不能做大小比较,因为这样没什么意义。

一个timedelta对象还可以与整数相乘,或通过//操作与一个整数相除。

还可以取反,或者用abs函数获得绝对值

4.无总结,不进步

本文的目的不在于详细说明python处理时间日期的api如何使用,而是想通过一个概览的形式,让大家抓住time和datetime模块的设计结构,从而能够清楚这些模块提供了哪些能力,在需要的时候能够想起来去用,至于查详细的api,应该是可以轻松解决的。

위 내용은 Python 시간 처리에 대한 전체 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제