Skip to main content

No project description provided

Project description

Python integration with Xautomata API

Kronos

Classe per la gestione dei timestamp in modo chiaro e univoco. La classe forza l'uso delle timezone indipendentemente da come si crea l'oggetto temporale.

Kronos è basata unicamente su librerie standard di python datetime, math e pytz.

Un oggetto Kronos è interamente compatibile con un oggetto datetime.

utilizzo

date

creazione

il metodo primetime permette di creare un elemento temporale Kronos

import Kronos
Kronos.primetime(year=2023, month=4)
>> 2023-04-01 00:00:00+02:00

primetime ha come campo obligatorio l'anno, i restanti valori vengono messi all'inizio del range temporale non assegnato. Se non definita, di default viene impostata la timezone di Roma.

Kronos.now() e Kronos.today() restituiscono l'oggetto Kronos rispettivamente con il momento corrente o il giorno corrente (il giorno è privo di time zone non avendo le ore).

conversione

E' possibile passare da datetime a Kronos e viceversa con semplici passaggi

import Kronos
from datetime import datetime
now_k = Kronos.from_datetime(datetime.now())  # da datetime a kronos
now_dt1 = Kronos.now().dt  # da Kronos a datetime estraendo l'attributo
now_dt2 = Kronos.now().datetime()  # da Kronos a datetime con funzione di estrazione

E' altrettanto semplice caricare convertire un isoformat in un oggetto kronos Kronos.from_iso('2023-01-01T00:00:00').

Un elemento Kronos è poi facilmente convertibile in un formato isoformat in piu di una maniera:

import Kronos
now_iso1 = Kronos.now().iso()  # da Kronos a isoformat
now_iso2 = Kronos.now().isoformat()  # da Kronos a isoformat (identica alla precedente)
now_iso3 = Kronos.now().dt.isoformat()  # da Kronos a datetime a isoformat()

In tutte queste situazioni, se la time zone è assente, viene sempre automaticamente aggiunta.

Se si carica un elemento date questo verra convertito in un datetime e abbianto ad una timezone.

costruttori

  • now
  • today
  • primetime
  • from_isoformat
  • from_iso
  • from_timestamp
  • from_ts
  • from_datetime
  • from_dt
  • from_format
  • from_list_iso_to_datetime
  • from_list_iso
  • from_timedelta
  • from_td

funzioni

Esistono una serie di operazioni applicabili agli oggetti Kronos:

  • start_of
  • end_of
  • add_duration
  • subtract_duration
  • ==, >, >=, <, <=, -
  • date, datetime, isoformat, iso, timestamp, ts

Le operazioni ==, >, >=, <, <=, - permettono di confrontare date cross classi, permettendo di comparare stringhe in isoformat e datetime con Kronos, di seguito un esempio.

import Kronos
from datetime import date, datetime
Kronos.now() > Kronos.from_iso("2022-01-01")
>>> True
Kronos.now() > datetime.fromisoformat("2022-01-01")
>>> True
Kronos.now() > date.fromisoformat("2022-01-01")
>>> True
Kronos.now() > "2022-01-01"
>>> True

start_of, end_of

Permettono di muovere il cursore temporale all'inizio o alla fine di una finestra scelta. E' possibile sceglire di trasformare una data nell'inizio della giornata o nella fine della settimana, rispetto alla data selezionata.

import Kronos
day = Kronos.now().start_of_day()  # ottengo l'inizio della giornata
month = Kronos.now().end_of_month()  # ottengo la fine del mese

I range temporale tra cui scegliere sono:

  • minute
  • hour
  • day
  • week
  • month
  • year

add and subtract duration

Permette di aggiungere o togliere un certo ammontare di range temporale dalla data scelta.

import Kronos
date = Kronos.from_iso('2023-01-01T00:00:00')  # converto un isoformat a Kronos
date.add_duration(days=3, minutes=7)  # aggiungo 3 giorni e 7 minuti
>> 2023-01-03 00:07:00+02:00
date.subtract_duration(years=1)  # tolgo 1 anno
>> 2022-01-01 00:00:00+02:00

concatenazione

Tutte le operazioni applicabili su un elemento Kronos sono concatenabili

import Kronos
date = Kronos.today().to_datetime().start_of_month().end_of_day()

Nell'esempio qui sopra viene presa la gioranta in formato date, viene convertita in datetime, viene preso l'inizio del mese e da li ci si sposta alla fine della giornata.

intervallo temporale

esiste un metodo leggermente differente, che dato un Kronos, un intervallo tempora e un offset restituisce gli estremi del range temporale richiesto.

import Kronos
start, stop = Kronos.from_iso('2023-01-01T00:00:00').from_interval(10, 10, 'days')
>> 2022-12-11 00:00:00, 2022-12-21 00:00:00

differenze temporali

Gli elementi Kronos supportano operazione di somma e sottrazione, ma a differenza di datetime, un operazione matematica tra due elementi kronos produce sempre un elemento kronos. La ragione di questa scelta è legata al minimizzare gli import per fare operazioni su oggetti temporale. Chiaramente una volta che un oggetto Kronos ha subito una operazione di questo genere non potra piu supportare i metodi indicati sopra. Nonostante cio' supporta metodi analoghi a quelli di timedelta e si comportano in modo similare agli altri metodi di Kronos.

+/-

Le operazioni supportate sono somme e sottrazioni

import Kronos
now = Kronos.now()
yesterday = now.subtract_duration(days=1)
diff = now - yesterday
>> 1 days

Sottraendo due elementi Kronos si ottiene un oggetto differenza analogo in tutto e per tutto a un timedelta

conversione

E' possibile passare da timedelta a Kronos e viceversa con semplici passatti

import Kronos
from datetime import timedelta
now_k = Kronos.from_timedelta(td=timedelta(days=1))  # da timedelta a kronos
now_td = (Kronos.now() - Kronos.now().subtract_duration(days=1)).td  # da Kronos a timedelta

approssimazione

gli oggetti Kronos di differenze temporali possono essere trasformati in numeri interi rappresentati l'approssimazione piu vicina al range temporale chiesto tramite il metodo in_periods.

import Kronos
now = Kronos.now()
yesterday = now.subtract_duration(days=1)
diff = now - yesterday
diff.in_days()
>> 1

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xautomata-kronos-3.0.0.tar.gz (8.7 kB view details)

Uploaded Source

Built Distribution

xautomata_kronos-3.0.0-py3-none-any.whl (10.3 kB view details)

Uploaded Python 3

File details

Details for the file xautomata-kronos-3.0.0.tar.gz.

File metadata

  • Download URL: xautomata-kronos-3.0.0.tar.gz
  • Upload date:
  • Size: 8.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for xautomata-kronos-3.0.0.tar.gz
Algorithm Hash digest
SHA256 1a8a633e0f99a478f9503b0d8a388fcb4cdc39b3c332aa05e75d1555a3b2fc4d
MD5 8e5cd810d3d0087d37fe8b433681e841
BLAKE2b-256 aa1d2f66d9968ca6cf14d3f954287244c9639067fac33643f8337e7e34042501

See more details on using hashes here.

File details

Details for the file xautomata_kronos-3.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for xautomata_kronos-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ae9c1402ea99486e5973e9faca07d29c5cc31c2ab8515b6ab0c55c69b86b4d4
MD5 5d6c6c3795d45b71e4e7ba0a3b5612e4
BLAKE2b-256 768d8a3fcda38e5faba03ca5b338aa5807d8da587d5fa24a2b7c399eb16cefc7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page