[PATCH] Fix DM4 dive time
Dirk Hohndel
dirk at hohndel.org
Tue May 14 22:56:31 PDT 2013
At least with the DM4 file that I have this creates the correct
timestamps. The dive numbers appear to be completely insane, though...
Are you sure that data[0] really is the dive number?
I get (in default reverse chronological order)
148
144
13
145
7
24
6
...
/D
On Wed, 2013-05-15 at 08:07 +0300, Miika Turkia wrote:
> DM4 stores the divetime in local time. The conversion from seconds since
> year 1 was 2 hours off. (So there is no timezones involved, which is
> good for us!)
>
> Signed-off-by: Miika Turkia <miika.turkia at gmail.com>
> ---
> parse-xml.c | 14 ++------------
> 1 file changed, 2 insertions(+), 12 deletions(-)
>
> diff --git a/parse-xml.c b/parse-xml.c
> index d6c189c..698b311 100644
> --- a/parse-xml.c
> +++ b/parse-xml.c
> @@ -1690,8 +1690,6 @@ extern int dm4_dive(void *param, int columns, char **data, char **column)
> float *profileBlob;
> unsigned char *tempBlob;
> int *pressureBlob;
> - time_t when;
> - struct tm *tm;
> char *err = NULL;
> char get_events_template[] = "select * from Mark where DiveId = %d";
> char get_events[64];
> @@ -1699,15 +1697,7 @@ extern int dm4_dive(void *param, int columns, char **data, char **column)
> dive_start();
> cur_dive->number = atoi(data[0]);
>
> - when = (time_t)(atol(data[1]));
> - tm = localtime(&when);
> -
> - /* Bailing out if localtime returns NULL */
> - if (!tm)
> - return -1;
> -
> - /* Timezones are not taken into account */
> - cur_dive->when = mktime(tm);
> + cur_dive->when = (time_t)(atol(data[1]));
> if (data[2])
> utf8_string(data[2], &cur_dive->notes);
>
> @@ -1821,7 +1811,7 @@ int parse_dm4_buffer(const char *url, const char *buffer, int size,
>
> /* StartTime is converted from Suunto's nano seconds to standard
> * time. We also need epoch, not seconds since year 1. */
> - char get_dives[] = "select D.DiveId,StartTime/10000000-62135604000,Note,Duration,SourceSerialNumber,Source,MaxDepth,SampleInterval,StartTemperature,BottomTemperature,D.StartPressure,D.EndPressure,Size,CylinderWorkPressure,SurfacePressure,DiveTime,SampleInterval,ProfileBlob,TemperatureBlob,PressureBlob,Oxygen,Helium,MIX.StartPressure,MIX.EndPressure FROM Dive AS D JOIN DiveMixture AS MIX ON D.DiveId=MIX.DiveId";
> + char get_dives[] = "select D.DiveId,StartTime/10000000-62135596800,Note,Duration,SourceSerialNumber,Source,MaxDepth,SampleInterval,StartTemperature,BottomTemperature,D.StartPressure,D.EndPressure,Size,CylinderWorkPressure,SurfacePressure,DiveTime,SampleInterval,ProfileBlob,TemperatureBlob,PressureBlob,Oxygen,Helium,MIX.StartPressure,MIX.EndPressure FROM Dive AS D JOIN DiveMixture AS MIX ON D.DiveId=MIX.DiveId";
>
> retval = sqlite3_open(url,&handle);
>
More information about the subsurface
mailing list