08 Demo: Python Time#

UW Geospatial Data Analysis
CEE467/CEWA567
David Shean

Introduction#

Python datetime#

NumPy datetime64#

Pandas Timestamp#

xarray#

Day of calendar year#

  • January 1 = 1

  • January 2 = 2

  • December 31 = 365

Water year#

  • Starts October 1, ends September

  • Southern hemisphere?

Time zones#

Discussion#

from datetime import datetime
import pandas as pd
import numpy as np
datetime?
Init signature: datetime(self, /, *args, **kwargs)
Docstring:     
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])

The year, month and day arguments are required. tzinfo may be None, or an
instance of a tzinfo subclass. The remaining arguments may be ints.
File:           /srv/conda/envs/notebook/lib/python3.10/datetime.py
Type:           type
Subclasses:     ABCTimestamp, _NaT
dt1 = datetime(2023, 2, 22)
dt2 = datetime.now()
print(dt2)
2023-02-25 21:28:50.308138
dt2
datetime.datetime(2023, 2, 25, 21, 28, 50, 308138)
dt2.year
2023
dt2.strftime?
Docstring: format -> strftime() style string.
Type:      builtin_function_or_method

Side note: formatting timestamp strings#

#Typical U.S. date format
dt2.strftime('%m/%d/%y')
'02/25/23'
#This won't sort alphanumerically
dt2.strftime('%m%d%Y')
'02252023'
#YYYYMMDD is better and will sort alphanumerically
dt2.strftime('%Y%m%d')
'20230225'
dt1
datetime.datetime(2023, 2, 22, 0, 0)
dt2
datetime.datetime(2023, 2, 25, 21, 28, 50, 308138)
dt_diff = dt2 - dt1
dt_diff
datetime.timedelta(days=3, seconds=77330, microseconds=308138)
dt_diff.total_seconds()
336530.308138

How many seconds in a day? In a year?#

  • approximately pi * 10^7

  • What is a second anyway?

dt_diff.total_seconds()/(60*60*24*365.25)
0.010664001956359167
60*60*24*365.25
31557600.0
dt2
datetime.datetime(2023, 2, 25, 21, 28, 50, 308138)
pd.to_datetime(dt2)
Timestamp('2023-02-25 21:28:50.308138')
ts1 = pd.Timestamp('2019-02-01 12:00:00')
ts2 = pd.Timestamp('2019-02-06 00:00:00')
ts1
Timestamp('2019-02-01 12:00:00')
ts2
Timestamp('2019-02-06 00:00:00')
dt = ts2 - ts1
dt
Timedelta('4 days 12:00:00')
ts1
Timestamp('2019-02-01 12:00:00')
ts1 + dt
Timestamp('2019-02-06 00:00:00')
ts2 + dt
Timestamp('2019-02-10 12:00:00')
ts1 - pd.Timedelta(days=1)
Timestamp('2019-01-31 12:00:00')
dt.total_seconds()
388800.0