OK, I solved this myself. Solution posted below.
I have a GeoEvent Definition with two date fields: Date_Entered & Date_Exited. As you may suspect, these fields indicate the date/time when an event (vehicle) enters and exists a GeoFence.
What I need to do is create a GeoEvent Service that calculates the difference betweens the two dates (in minutes), to determine how many minutes (n_minutes) the vehicle was inside the GeoFence. If n_minutes > x, the feature representing the GeoFence will have one of its attributes updated to indicate it was "patrolled".
Using this tutorial I created a table in the geodatabase to store the patrol info for each GeoFence (vehicle id, geofence name, date enterered and date exited), and the required GeoEvent inputs / outputs and services to update this table. This is all working.
Where I am stuck is using these date fields in a Field Calculator processor's expression. I thought the Field Calculator automatically converts date fields to their milliseconds since epoch representation, so I tried:
((Date_Exited - Date_Entered) / 1000) / 60. This results in a NULL value.
I then tried:
((toLong(Date_Exited) - toLong(Date_Entered)) / 1000) / 60. This also results in a NULL value.
Is there any way to do this kind of Date math?
Solved! Go to Solution.
It turns out there was nothing wrong with my expression. The reason I was getting a NULL value is that I failed to include the two date fields in the Field Mapper activity prior to the Field Calculator. This wasn't just an oversight on my part. It was more of a lack of understand of how the plumbing works in GeoEvent Services.
It turns out there was nothing wrong with my expression. The reason I was getting a NULL value is that I failed to include the two date fields in the Field Mapper activity prior to the Field Calculator. This wasn't just an oversight on my part. It was more of a lack of understand of how the plumbing works in GeoEvent Services.