# Calculate row differences in seconds of a datetime column with ArcGIS

I have a point feature class in ArcGIS desktop. There is a timestamp column named `TS` in datetime format in the attribute table.

I need to calculate and write time differences of rows from previous rows to a new column named `RowDiff`. Results will be in "seconds". `RowDiff` datatype is short integer.

I've found these links but I have no idea about implementing the functions:
https://desktop.arcgis.com/en/arcmap/latest/analyze/arcpy-time/esritimedelta-class.htm
https://www.programiz.com/python-programming/datetime

I've found the following code but results are in string format like `0:00:06.00005` and useless for me. What I need is row differences in seconds and an integer data type, not decimals.

``````import arcpy

from arcpy import da

gpsdata = arcpy.GetParameterAsText(0)

#set firstRow variable to true
firstRow = True

with arcpy.da.UpdateCursor(gpsdata, ["OBJECTID", "TS", "D_T"]) as cursor:

for row in cursor:
gap2 = row

#check if its the first row
if firstRow == True:
gap1 = gap2
#set firstrow to false
firstRow = False
continue
row = str(gap2 - gap1)
gap1 = gap2
cursor.updateRow(row)
``````

Sample results should be as follows: It's important to understand that Esri didn't create the `datetime` object used to transmit this information -- This is a fundamental Python datatype. The Python documentation covers the `timedelta` that results from datetime subtraction.

The difference in seconds (`timedelta.total_seconds()`) is a `float` value because the `datetime` type supports milliseconds (though ArcPy doesn't use them), but you can cast (or round) to `int` if you want to.

Your code has more complexity than is necessary. I'd do the following:

``````import arcpy

gpsdata = arcpy.GetParameterAsText(0)

prev = None
with arcpy.da.UpdateCursor(gpsdata, ["OBJECTID", "TS", "D_T"]) as cursor:
for row in cursor:
tval = row
if (prev):
row = int((tval - prev).total_seconds())
else:
row = None # could be zero
cursor.updateRow(row)
prev = tval
``````

It might be wise to specify an `ORDER BY` so that your `TS` values are only increasing. Note that you can change the correct undefined (`None`) value to zero if you want.