LayerTime

Summary

The LayerTime object provides information about how time is stored and configured in time-enabled layers or tables.

Discussion

Fields containing the time values—such as start and end time, the time-step interval, and so on—can be used for not only gaining knowledge about the time properties on a time-enabled layer or table but also for performing further data management and analysis tasks. You can also use the time information to ensure that the time specified for selecting features or rows in a table is within the start and end time range.

The enableTime method on the Layer or Table classes allows you to enable time on that object if it has time information. You should test to see if the isTimeEnabled property returns True before attempting to access LayerTime properties.

Tip:

You can use the MapTime class to access map time settings if a MapFrame on a Layout contains time-enabled layers or tables.

Properties

PropertyExplanationData Type
daylightSavings
(Read and Write)

Indicates whether the time values in the time field of the time-enabled layer or table were collected while observing daylight saving time rules in the input time zone.

Boolean
endTime
(Read and Write)

The end date and time for a time-enabled layer or table.

DateTime
endTimeField
(Read and Write)

The name of the field containing the end time values. Not all layers or tables use an end time field. If each feature or row has a single time field, only the startTimeField will be used and endTimeField will be None. If each feature or row has a start and end time field, both the startTimeField and endTimeField will be used.

String
startTime
(Read and Write)

The start date and time for a time-enabled layer or table.

DateTime
startTimeField
(Read and Write)

The name of the field containing the start time values. If each feature or row has a single time field, only the startTimeField will be used and endTimeField will be None. If each feature or row has a start and end time field, both the startTimeField and endTimeField will be used.

String
timeDimension
(Read and Write)

The name of the dimension containing time values when using netCDF data.

String
timeFormat
(Read and Write)

The format in which the time values were stored in the startTimeField and endTimeField. The time format is important when formulating a time query.

String
timeOffset
(Read and Write)

The time offset applied to the time values in your data.

Double
timeOffsetUnits
(Read and Write)

The time offset unit that describes the timeOffset applied to the time values in your data.

  • MILLISECONDS
  • SECONDS
  • MINUTES
  • HOURS
  • DAYS
  • WEEKS
  • MONTHS
  • YEARS
  • DECADES
  • CENTURIES
String
timeStepInterval
(Read and Write)

The time-step interval defines the granularity of the temporal data. The time-step interval can be thought of as how often the time values were recorded in your data.

Double
timeStepIntervalUnits
(Read and Write)

The time-step interval unit that describes the timeStepInterval applied to the time values in your data.

  • MILLISECONDS
  • SECONDS
  • MINUTES
  • HOURS
  • DAYS
  • WEEKS
  • MONTHS
  • YEARS
  • DECADES
  • CENTURIES
String
timeZone
(Read and Write)

The time zone for the time-enabled layer or table.

Tip:

For a list of valid time zone strings, see ListTimeZones.

String

Code sample

LayerTime example 1

The following script tests whether layers in a layer file support time and whether time properties have been set. It then uses time information (start time and end time) to calculate the time extent of a time-enabled layer.

import arcpy
lyrFile = arcpy.mp.LayerFile(r'C:\Projects\Time\ShipPositions.lyrx')
for lyr in lyrFile.listLayers():
    if lyr.supports('TIME'):
        if lyr.isTimeEnabled:
            lyrTime = lyr.time
            startTime = lyrTime.startTime
            endTime = lyrTime.endTime
            timeDelta = endTime - startTime
            print(f"Layer: {lyr.name}")
            print(f"  Start Time: {str(startTime.strftime('%m-%d-%Y'))}")
            print(f"  End Time:   {str(endTime.strftime('%m-%d-%Y'))}")
            print(f"  Time Extent: {str(timeDelta.days)} days")
        else:
            print("No time properties have been set on the layer")
    else:
        print("Time is not supported on this layer")
LayerTime example 2

The following script creates a feature class from input features valid at a certain time, while ensuring that the selection time is within the time extent (start time and end time) of the time-enabled layer.

import arcpy, os

# Setup output location and overwrite status
arcpy.env.overwriteOutput = True
path = r"C:\Projects\Time\Ships"
output_GDB = os.path.join(path, "Ships.gdb")

# Get time information from a layer in a layer file    
lyrFile = arcpy.mp.LayerFile(os.path.join(path, "ShipPositions.lyrx"))
lyr = lyrFile.listLayers()[0]
lyrTime = lyr.time

# Set the time for which you want to select features in the time-enabled layer
fromTimeSelection = datetime.datetime(1776, 1, 1)
toTimeSelection = datetime.datetime(1777, 1, 1)

# Get the start and end time of the time enabled layer and its time field
startTime = lyrTime.startTime
endTime = lyrTime.endTime
timeField = lyrTime.startTimeField

# Check to see if the time for which you want to select features lies within the start and end time of the time enabled layer
if (fromTimeSelection < startTime or toTimeSelection > endTime):
    print("The time specified for selecting features is not within the time extent of the layer")
else:
    # Formulate the time query
    timeQuery = f"{timeField} >= timestamp '{fromTimeSelection}' And \
                  {timeField} < timestamp '{toTimeSelection}'"
    # Process: Feature Class to Feature Class
    arcpy.conversion.FeatureClassToFeatureClass(lyr, output_GDB, "Ships_1776", timeQuery, "", "")

# Add the new layer to a map and enable time
p = arcpy.mp.ArcGISProject(os.path.join(path, "ships.aprx"))
lyt = p.listLayouts('Ships')[0]
mf = lyt.listElements('MAPFRAME_ELEMENT', 'NoTimeMF')[0]
m = mf.map
m.addDataFromPath(os.path.join(output_GDB, "Ships_1776"))
l = m.listLayers("Ships_1776")[0]
l.enableTime()
mt = mf.time
mt.isTimeEnabled = True

# Save a copy of the project
p.saveACopy(os.path.join(path, "ships2.aprx"))