Konvertere TimeAxis før 1970 til datetime

8 views
Skip to first unread message

Eli Alfnes

unread,
Apr 20, 2017, 2:45:11 AM4/20/17
to shyft
Hei

Hvordan kan jeg konvertere TimeAxis som starter før 1970 til datetime?

[datetime.datetime.utcfromtimestamp(t.start) for t in ts.time_axis]  feiler for datoer tidligere enn 1970-01-01 på windows.

mvh Eli

sigbjorn.helset

unread,
Apr 20, 2017, 4:44:28 PM4/20/17
to shyft
Hei,

datetime og pytz har sine egne problemer, og kombinert med 'windows-features '
så går det ordentlig galt, som i dette tilfellet.

google gir et svar på det konkrete problemet,  f.eks:


For  matplotlib, bokeh etc. kan man unngå datetime og alle problemene den introduserer fullstendig, fordi disse tilbyr å sende inn 
presis representasjon for tid istedet for kalender-koordinater.

Vi kommer til å justere eksemplene våre i shyft slik at vi unngår å benytte datetime.

For f.eks matplotlib og tidakse kan du benytte:

from shyft.orchestration import plotting as splt
ta=TimeAxis( ...)
timestamps = splt.utc_to_greg(ta.time_points[:-1])
plt.plot(timestamps,...)


I denne sammenhengen er det greit å nevne at i shyft  benytter vi

standarden sekunder siden 1970 utc for å representere  tid

For å konvertere mellom kalender-koordinater (Y,M,D,h,m,s)  eller (iso year,week day, h,m,s) og tid benyttes
Calendar() klassen. Denne baserer seg på standardbiblioteker (p.t. c++ std, og boost).

oslo = Calendar('Europe/Oslo')  # Europe/Oslo er en olson tz-id, google 
# fra kalender koordinater til presis tid
t1 = oslo.time(2017,5,10, 9,30,15)  # fra Y, M, D h m s
t2 = oslo.time_from_week(2017,50,1, 9,45,0) # fra iso Year week, day h m s

# fra presis tid til kalender-koordinater i en gitt kalender/tidssone
t1_as_YMDhms = oslo.calendar_units(t1) #
t1_as_isoYWdhms =oslo.calendar_week_units(t1) 

# fra tid til iso standard tekst
t1_as_iso_std_string = oslo.to_string(t1)

For å gjøre kalender-semantiske operasjoner (tar hensyn til tz, dst osv, benyttes også Calendar() klassen,
c.trim(t,delta_t)
c.add(t,delta_t,n)
c.diff_units(t_from,t_to,delta_t_unit)

f.eks:
# Runde av til nærmeste start av iso uke i norsk lokal tid
t1_oslo_week =oslo.trim(t1,Calendar.WEEK)

# legge til en semantisk kalender dag i norsk lokal tid (23, 24 eller 25 timer lang..)
t_next_day = oslo.add(t1,Calendar.DAY,1) # 1 dag

# finne antall semantiske kalender dager mellom to tidspunkt i norsk lokaltid:
n = oslo.diff_units(t1,t2,Calendar,DAY)


Mvh Sigbjørn
Reply all
Reply to author
Forward
0 new messages