Création d'une bibliothèque Python DateTimeRange qui gère les plages horaires

Je l'ai fait parce que j'en ai besoin de temps en temps.

Documentation http://datetimerange.readthedocs.org/en/latest/

Installation

pip install DateTimeRange

Usage L'endroit où la chaîne de caractères d'heure est entrée peut être de type datetime.

Création et conversion en chaînes

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
str(time_range)
'2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900'

Comparaison

from datetimerange import DateTimeRange
lhs = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
rhs = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print "lhs == rhs: ", lhs == rhs
print "lhs != rhs: ", lhs != rhs
lhs == rhs:  True
lhs != rhs:  False

Déplacer la plage de temps

import datetime
from datetimerange import DateTimeRange
value = DateTimeRange("2015-03-22T10:10:00+0900", "2015-03-22T10:20:00+0900")
print value + datetime.timedelta(seconds=10 * 60)
print value - datetime.timedelta(seconds=10 * 60)
2015-03-22T10:20:00+0900 - 2015-03-22T10:30:00+0900
2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900

Spécification du format de conversion de la chaîne de caractères

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.start_time_format = "%Y/%m/%d"
time_range.end_time_format = "%Y/%m/%dT%H:%M:%S%z"
time_range
2015/03/22 - 2015/03/22T10:10:00+0900

Ajout du temps écoulé lors du retour des chaînes

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.is_output_elapse = True
time_range
2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900 (0:10:00)

Réglage du séparateur

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.separator = " to "
time_range
2015-03-22T10:00:00+0900 to 2015-03-22T10:10:00+0900

Obtenir l'heure de début (type datetime.datetime)

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.start_datetime
datetime.datetime(2015, 3, 22, 10, 0, tzinfo=tzoffset(None, 32400))

Obtenez l'heure de début sous forme de chaîne

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print time_range.get_start_time_str()
time_range.start_time_format = "%Y/%m/%d %H:%M:%S"
print time_range.get_start_time_str()
2015-03-22T10:00:00+0900
2015/03/22 10:00:00

Obtenir l'heure de fin (type datetime.datetime)

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.end_datetime
datetime.datetime(2015, 3, 22, 10, 10, tzinfo=tzoffset(None, 32400))

Obtenir l'heure de fin sous forme de chaîne de caractères

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print time_range.get_end_time_str()
time_range.end_time_format = "%Y/%m/%d %H:%M:%S"
print time_range.get_end_time_str()
2015-03-22T10:10:00+0900
2015/03/22 10:10:00

Obtenez timedelta

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.timedelta
datetime.timedelta(0, 600)

Obtenez timedelta en quelques secondes

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.get_timedelta_second()
600.0

Définir l'heure de début

from datetimerange import DateTimeRange
time_range = DateTimeRange()
print time_range
time_range.set_start_datetime("2015-03-22T10:00:00+0900")
print time_range
NaT - NaT
2015-03-22T10:00:00+0900 - NaT

Définir l'heure de fin

from datetimerange import DateTimeRange
time_range = DateTimeRange()
print time_range
time_range.set_end_datetime("2015-03-22T10:10:00+0900")
print time_range
NaT - NaT
NaT - 2015-03-22T10:10:00+0900

Définir la plage horaire

from datetimerange import DateTimeRange
time_range = DateTimeRange()
print time_range
time_range.set_time_range("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print time_range
NaT - NaT
2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900

La valeur est-elle définie

from datetimerange import DateTimeRange
time_range = DateTimeRange()
print time_range.is_set()
time_range.set_time_range("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print time_range.is_set()
False
True

Le temps est-il inversé?

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:10:00+0900", "2015-03-22T10:00:00+0900")
try:
    time_range.validate_time_inversion()
except ValueError:
    print "time inversion"
time inversion

Vérification de la valeur de la plage horaire

from datetimerange import DateTimeRange
time_range = DateTimeRange()
print time_range.is_valid_timerange()
time_range.set_time_range("2015-03-22T10:20:00+0900", "2015-03-22T10:10:00+0900")
print time_range.is_valid_timerange()
time_range.set_time_range("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print time_range.is_valid_timerange()
False
False
True

Est-ce dans l'intervalle de temps?

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
print "2015-03-22T10:05:00+0900" in time_range
print "2015-03-22T10:15:00+0900" in time_range
True
False

Obtenir un itérateur (range)

import datetime
from datetimerange import DateTimeRange

time_range = DateTimeRange("2015-01-01T00:00:00+0900", "2015-01-04T00:00:00+0900")
for value in time_range.range(datetime.timedelta(days=1)):
    print value
2015-01-01 00:00:00+09:00
2015-01-02 00:00:00+09:00
2015-01-03 00:00:00+09:00
2015-01-04 00:00:00+09:00
from datetimerange import DateTimeRange
from dateutil.relativedelta import relativedelta

time_range = DateTimeRange("2015-01-01T00:00:00+0900", "2016-01-01T00:00:00+0900")
for value in time_range.range(relativedelta(months=+4)):
    print value
2015-01-01 00:00:00+09:00
2015-05-01 00:00:00+09:00
2015-09-01 00:00:00+09:00
2016-01-01 00:00:00+09:00

La plage de temps se chevauche-t-elle?

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
time_range.is_intersection(x)
True

Définir la plage horaire où les plages horaires se chevauchent

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
time_range.intersection(x)
time_range
2015-03-22T10:05:00+0900 - 2015-03-22T10:10:00+0900

Définir sur une plage de temps qui inclut la plage de temps

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
x = DateTimeRange("2015-03-22T10:05:00+0900", "2015-03-22T10:15:00+0900")
time_range.encompass(x)
time_range
2015-03-22T10:00:00+0900 - 2015-03-22T10:15:00+0900

Tronquer la plage horaire

from datetimerange import DateTimeRange
time_range = DateTimeRange("2015-03-22T10:00:00+0900", "2015-03-22T10:10:00+0900")
time_range.is_output_elapse = True
print "before truncate: ", time_range
time_range.truncate(10)
print "after truncate:  ", time_range
before truncate:  2015-03-22T10:00:00+0900 - 2015-03-22T10:10:00+0900 (0:10:00)
after truncate:   2015-03-22T10:00:30+0900 - 2015-03-22T10:09:30+0900 (0:09:00)

Recommended Posts

Création d'une bibliothèque Python DateTimeRange qui gère les plages horaires
Utilisez networkx, une bibliothèque qui gère les graphiques en python (Partie 2: Tutoriel)
Création d'une bibliothèque pour python capable de gérer facilement la division morphologique
Création de Simple SQLite, une bibliothèque Python qui simplifie la création de table SQLite / l'insertion de données
Une note sur les fonctions de la bibliothèque Linux standard qui gère le temps
[Python] Une bibliothèque pratique qui convertit les kanji en hiragana
Publier / télécharger une bibliothèque créée en Python vers PyPI
Publication d'une bibliothèque qui masque les données de caractères dans les images Python
Programme Python qui agrège l'utilisation du temps à partir des données icalendar
Utilisez pymol comme bibliothèque python
Un mémo qui gère les guillemets doubles pleine largeur avec les expressions régulières Python
J'ai créé une bibliothèque Python pour appeler l'API de LINE WORKS
À propos de psd-tools, une bibliothèque capable de traiter des fichiers psd en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
Générer un badge d'affichage du nombre de téléchargements de la bibliothèque Python
Un script python qui supprime les fichiers ._DS_Store et ._ * créés sur Mac
Une note sur mock (bibliothèque fictive Python)
J'ai créé un modèle de projet Python générique
Présentation d'une bibliothèque qui n'était pas incluse dans pip sur Python / Windows
Création de la bibliothèque Go nzargv qui organise bien les arguments de ligne de commande
[Python] J'ai créé un bot Twitter qui génère des tweets semblables à des amis avec des règles de chaîne de Markov.
Essayez d'utiliser APSW, une bibliothèque Python que SQLite peut prendre au sérieux
Comment utiliser hmmlearn, une bibliothèque Python qui réalise des modèles de Markov cachés
Lecture de code de faker, une bibliothèque qui génère des données de test en Python
Référence d'inversion de bibliothèque de date / heure Python
[Python] Un programme qui crée des escaliers avec #
Créé un voyage de fléchettes avec python (news)
Essayez le scraping HTML avec la bibliothèque Python
[Python] Créez un LineBot qui s'exécute régulièrement
Un monde typé qui commence par Python
Un programme qui utilise Python pour lire des fichiers indésirables
J'ai créé un outil de mot de passe en Python.
[Python] Un programme qui arrondit le score
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
Un programme qui envoie une quantité fixe de courrier à un moment spécifié par Python
Python: analyse des séries temporelles: création d'un modèle SARIMA
Création d'un wrapper Python pour l'API Qiita
Un mémo que j'ai écrit un tri rapide en Python
[Python] Un outil qui permet une importation relative intuitive
[Python3] Une histoire bloquée avec la conversion du fuseau horaire
[Python / Tkinter] Une classe qui crée un cadre défilable
Un joli nimporter qui connecte nim et python
Créer une page qui se charge indéfiniment avec python
Un programme qui supprime les instructions en double en Python
Publier un module Python qui calcule les éléments météorologiques
Une manière intelligente de chronométrer le traitement avec Python
"Kit Python" qui appelle des scripts Python depuis Swift
Python: créer une classe qui prend en charge l'affectation décompressée
Un mémorandum sur la bibliothèque de wrapper Python tesseract
Plug-in Vim qui formate automatiquement les styles Python
Liste de tâches simple créée avec Python + Django
Création d'une bibliothèque Python pour écrire des inclusions complexes et les réduire de manière facile à lire
Une note sur l'implémentation de la bibliothèque qui explore les hyperparamètres à l'aide de l'optimisation bayésienne en Python
Un script python qui souhaite utiliser l'heure de démarrage / fin de Mac pour la gestion des présences