[GRASS-dev] Microseconds in timestamps in abstract_space_time_dataset.py

Nikos Alexandris nik at nikosalexandris.net
Sat Oct 21 01:08:40 PDT 2017


Dear Soeren & Co,

the following stumbles in timestamps with microseconds. See:

t.info lst -g

id=lst at lst
..
creator=nik
temporal_type=absolute
creation_time=2017-10-16 09:10:15.689554
modification_time=2017-10-16 09:47:01.646840
semantic_type=mean
start_time=2013-04-13 10:00:09.935625
end_time=2017-04-24 09:57:43.257139
granularity=1 second
..


First item is:

t.rast.list lst -u column=name,start_time |head -1
lst_LC81920282013103LGN01|2013-04-13 10:00:09.935625


The error:

```
t.rast.aggregate input=lst output=lst_yearly basename=lst_yearly suffix=gran granularity="1 year" method=average --o
0..20..40..60..80..100
0..100
0..Traceback (most recent call last):
  File "/osgeo/grass72/dist.x86_64-pc-linux-gnu/scripts/t.rast.aggregate", line 213, in <module>
    main()
  File "/osgeo/grass72/dist.x86_64-pc-linux-gnu/scripts/t.rast.aggregate", line 203, in main
    sp.get_relative_time_unit(),  dbif)
  File "/osgeo/grass72/dist.x86_64-pc-linux-gnu/etc/python/grass/temporal/register.py", line 499, in register_map_object_list
    file=filename, dbif=dbif)
  File "/osgeo/grass72/dist.x86_64-pc-linux-gnu/etc/python/grass/temporal/register.py", line 341, in register_maps_in_space_time_dataset
    sp.update_from_registered_maps(dbif)
  File "/osgeo/grass72/dist.x86_64-pc-linux-gnu/etc/python/grass/temporal/abstract_space_time_dataset.py", line 2376, in update_from_registered_maps
    tstring, time_format)
  File "/usr/lib64/python2.7/_strptime.py", line 335, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: .935625
```

Two possible updates. Remove microseconds altogether:

Index: abstract_space_time_dataset.py
===================================================================
--- abstract_space_time_dataset.py      (revision 71469)
+++ abstract_space_time_dataset.py      (working copy)
@@ -2368,6 +2368,8 @@
                     # Convert the unicode string into the datetime format
                     if self.is_time_absolute():
                         if tstring.find(":") > 0:
+                            if tstring.find('.') > 0:
+                                tstring = tstring.split('.')[0]
                             time_format = "%Y-%m-%d %H:%M:%S"
                         else:
                             time_format = "%Y-%m-%d"

Or, retain them:

Index: abstract_space_time_dataset.py
===================================================================
--- abstract_space_time_dataset.py      (revision 71469)
+++ abstract_space_time_dataset.py      (working copy)
@@ -2367,7 +2367,9 @@
                     tstring = row[0]
                     # Convert the unicode string into the datetime format
                     if self.is_time_absolute():
-                        if tstring.find(":") > 0:
+                        if tstring.find(":") and tstring.find(".") > 0:
+                            time_format = "%Y-%m-%d %H:%M:%S.%f"
+                        elif tstring.find(":") > 0:
                             time_format = "%Y-%m-%d %H:%M:%S"
                         else:
                             time_format = "%Y-%m-%d"


As ignorant as I am, I'd prefer the second. Would this cause problems to
t.* operations?

Thanks, Nikos
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20171021/2620334a/attachment.sig>


More information about the grass-dev mailing list