Maison >Tutoriel système >Linux >Un résumé complet de la gestion du temps Python

Un résumé complet de la gestion du temps Python

PHPz
PHPzavant
2024-01-26 08:06:16458parcourir

Un résumé complet de la gestion du temps Python

1.Aperçu

Le module datetime est principalement utilisé pour représenter les dates, c'est ce que nous appelons souvent l'année, le mois, le jour, l'heure, les minutes et les secondes. Le module calendrier est principalement utilisé pour représenter l'année, le mois, le jour, le jour de la semaine et d'autres informations. Le module horaire se concentre principalement sur les heures, les minutes et les secondes. D'un point de vue fonctionnel approximatif, on peut penser que les trois sont dans une relation complémentaire, chacun se concentrant sur un domaine. Il est pratique pour les utilisateurs de choisir les modules appropriés en fonction de différents objectifs.

2. Commençons par le module temps

Afin d'apprendre le module temps, nous devons d'abord connaître plusieurs concepts liés au temps :

(1)époque

Supposons que nous voulions exprimer le temps en millisecondes, par exemple 1 000 000 de millisecondes. Ensuite, il y a un problème qui doit être résolu. Quel est le point de départ de 1 000 000 de millisecondes, c'est-à-dire quel est notre point de base de temps ? Par exemple, si je dis que vous mesurez 1,8 mètre, cette hauteur fait référence au sol où vous vous tenez. Ce point de référence temporelle est l'époque. Dans le système Unix, ce point de référence est le point temporel à 0h00 le 1er janvier 1970.

(2)GMT, UTC

Nous avons dit plus haut que cette époque représente le point de départ de 1970, alors à quelle heure de base se situe cette année 1970 ? De manière générale, il est relatif à l'heure de Greenwich, également appelée heure GMT (Greenwich Mean Time), et également appelée UTC (Coended Universal Time). Pourquoi une base de temps a-t-elle deux noms ? Historiquement, GMT venait en premier, puis UTC.

UTC est la norme de temps que nous utilisons actuellement, et GMT est l'ancienne norme de mesure du temps. UTC calcule l'heure en fonction des horloges atomiques, tandis que GMT calcule l'heure en fonction de la rotation et de la révolution de la Terre.

Ainsi, UTC peut être considéré comme l’heure de référence réelle, et l’écart de GMT par rapport à UTC est de 0.

En réalité, notre ordinateur dispose d'un module matériel RCT, qui enregistre l'heure UTC en temps réel. Ce module est alimenté par une batterie séparée et ne sera pas affecté même s'il est éteint.

Avec la base de temps de l'époque et la base UTC, nous pouvons représenter avec précision une heure.

(3)DST, tzone

Bien que nous puissions déjà représenter avec précision une heure, dans de nombreux cas, nous devons encore ajuster l'heure en fonction de la situation réelle dans la région. Le plus courant est le fuseau horaire, tzone, que je pense que tout le monde connaît.

À cette heure, lorsque nous disons l'heure de 5h05, nous devons ajouter 5h05 dans quel fuseau horaire pour décrire avec précision une heure.

Un autre réglage de l'heure est l'heure d'été.

DST signifie Daylight Saving Time, ce qui signifie que pour utiliser pleinement la lumière du soleil et réduire la consommation d'électricité, l'heure est artificiellement ajustée, en fonction des politiques et réglementations des différents pays et régions. Par exemple, si vous vous réveillez à 7 heures en hiver mais à 6 heures en été, lorsque l'été arrive, l'heure est artificiellement ajoutée d'une heure. Cela vous fera toujours penser que vous vous réveillez. à 7 heures, mais en fait c'est une heure plus tôt.

Donc, pour ceux d'entre nous qui sont curieux, nous devons nous demander, comment python connaît-il les valeurs de tzone et DST ? La réponse passe par les variables d'environnement.

Ici, nous utilisons Linux uniquement comme exemple pour expliquer.

Il existe une variable d'environnement TZ sous Linux, sa valeur est similaire à ceci :

CST+08EDT, M4.1.0, M10.5.0, cette chaîne peut être interprétée comme suit, séparez-les par des espaces et divisez-les en trois parties

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

Le CST dans la première partie représente le nom du fuseau horaire, qui est l'heure standard de la Chine, que nous appelons l'heure de Pékin. +8 signifie l'heure de Pékin plus 8 heures est l'heure UTC

.

La deuxième partie EDT représente le nom de DST. Nous disons que l'heure d'été est différente en raison des différentes politiques et réglementations dans différents pays et régions. Vous pouvez également ajouter une valeur d'ajustement de l'heure après EDT comme après CST, mais dans notre pays, ce n'est que le cas. entre 1986 et 1992. L’heure d’été a été mise en œuvre pendant un certain temps en 2015, mais a maintenant été abolie, il n’est donc pas nécessaire d’ajouter un délai d’ajustement plus tard.

La troisième partie représente l'heure de début et de fin de mise en œuvre de l'heure d'été, nous ne l'expliquerons pas en détail.

(4) Représentation temporelle, acquisition, conversion

La méthode de base pour obtenir l'heure dans le module horaire est

t = time.time()

Il renvoie le nombre de secondes entre l'époque et maintenant (exprimé sous forme de nombre à virgule flottante), en utilisant l'heure UTC.

Nous souhaitons naturellement convertir ce nombre de secondes sous la forme d'année, mois, jour, heure, minute et seconde, et cette conversion est divisée en deux types, l'un utilise toujours l'heure UTC et l'autre utilise l'heure ajustée. dans notre fuseau horaire.

Le module temps nous propose deux méthodes,

time. gmtime(t)
time.localtime(t)

Les deux renvoient une instance de la classe struct_time avec les propriétés suivantes :

Un résumé complet de la gestion du temps Python

Par rapport au temps exprimé en secondes, cette expression nous convient mieux à comprendre.

Si ces deux fonctions sont appelées sans passer de paramètres, elles appelleront time.time() en interne et utiliseront les secondes renvoyées pour la conversion.

Au contraire, python fournit également des méthodes pour convertir ces deux struct_times en secondes.

La méthode

calendar.timegm() est utilisée pour convertir le struct_time d'UTC (l'objet de retour de gmtime) en nombre de secondes à partir de l'époque

time.mktime() est utilisé pour convertir l'objet struct_time (c'est-à-dire l'objet de retour de l'heure locale) ajusté avec le fuseau horaire en nombre de secondes à partir de l'époque

C'est-à-dire que la méthode mktime trouvera d'abord les informations de fuseau horaire et d'heure d'été dans le système, et utilisera ces informations pour ajuster struct_time, puis les convertira en secondes.

Un autre besoin courant est de convertir entre une heure et une chaîne représentant l'heure.

Strftime et strptime dans le module time sont utilisés pour cela.

Tout le monde devrait connaître leur signification en regardant leur nom,

strftime est l'heure au format de chaîne, utilisée pour formater l'heure en chaîne

strptime est le temps d'analyse de chaîne, utilisé pour analyser les chaînes en temps.

Il convient de noter que les heures ici sont toutes des objets struct_time.

Sur la façon de formater l'heure, c'est une connaissance très simple. Ici, j'emprunte le contenu du document du site officiel.

Un résumé complet de la gestion du temps Python

En plus de ces deux fonctions, le module time fournit également deux méthodes pratiques pour aider à convertir le temps en chaîne

asctime est utilisé pour convertir un objet struct_time en une chaîne standard de 24 caractères, comme indiqué ci-dessous :

Dim 20 juin 23:21:05 1993

La méthode ctime a la même fonction que asctime, sauf qu'elle reçoit les secondes en interne, elle convertira d'abord les secondes en struct_time via localtime, puis ce sera la même chose que asctime.

Ce qui précède est le contenu principal du module time. J'essaie d'utiliser une formule pour aider à mémoriser ces API

.
time点time得秒数

传入gm, local time得struct_time

要想变回原秒数

你得传回calendar.timegm和time. mktime

string f和string p

格式化时间靠哥俩

你要还是嫌费事

asctime ,ctime来助力

专门帮你转字符串

前者接收struct_time

后者专门处理秒数

分工合作不费力

学好time模块基本功

做个时间的明白人!

Ensuite, nous allons commencer à apprendre le module datetime.

3.module datetime (1) Aperçu

Le module time résout le problème de l'obtention et de la représentation de l'heure, et le module datetime résout en outre le problème de l'obtention et de la manipulation rapides des informations sur l'année, le mois, le jour, l'heure, les minutes et les secondes dans le temps.

Pour faire simple, il n'y a que trois classes principales dans ce module. La classe date représente l'année, le mois et le jour, et la classe time représente les heures, les minutes, les secondes et les millisecondes. Ne la confondez pas avec le module time. ici. Un jingle peut aider à se souvenir de cette situation :

Il n'y a pas de temps dans le temps

Caché dans datetime

Le montage est-il mauvais ? Eh bien, je le pense aussi.

La classe datetime est une combinaison de date et d'heure.

Une chose doit être expliquée à l'avance.La classe time et la classe datetime ont un attribut.Sa valeur est un objet tzinfo, qui contient les informations de fuseau horaire de l'heure ou de la datetime. De manière générale, cet objet time ou datetime est. conscient, et il peut être converti avec précision en secondes depuis l'époque.

Si cette propriété est définie sur Aucun, alors l'objet heure ou l'objet datetime n'aura pas d'informations de fuseau horaire. Plus précisément, s'il représente l'heure locale ou l'heure UTC, nous devons décider nous-mêmes dans le programme.

L'heure locale dont nous parlons ici fait référence à l'heure de notre fuseau horaire, et l'heure utc fait référence à l'heure standard internationale, qui est l'heure de Greenwich. Idem ci-dessous.

N'oubliez pas qu'il n'y a aucune information de fuseau horaire dans la date.

(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,应该是可以轻松解决的。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer