Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: bonmario - Luglio 18, 2017, 12:43:38 pm

Titolo: RISOLTO: [OT] Conversione date
Inserito da: bonmario - Luglio 18, 2017, 12:43:38 pm
Ciao a tutti,
mi sto facendo un programma che analizza alcuni dati che mi servono di SportsTracker.
Per farlo, leggo un file Xml, che ad un certo punto ha questo tag:
Codice: [Seleziona]
<last_modified_time>1499842731670</last_modified_time>
dove, naturalmente ogni volta cambia il contenuto.

E' da un paio di giorni che ci giro intorno, ma non ho ancora capito come convertire quel valore in una data valida (dell'orario non mi interessa troppo ...)

Qualcuno di voi ha qualche idea?

P.S. Questi sono i valori da gennaio ad oggi:
Codice: [Seleziona]
1494666347982 - Walking, January 1, 2:00
1495369486028 - Running, May 20, 10:02
1495381270507 - Walking, May 21, 15:24
1495872064957 - Walking, May 27, 9:58
1495896418724 - Cycling, May 27, 16:34
1496435099246 - Running, June 2, 8:00
1496500881132 - Cycling, June 3, 16:35
1496762361683 - Running, June 5, 10:51
1497082763475 - Running, June 10, 9:42
1497195182104 - Cycling, June 11, 16:15
1497763342572 - Running, June 18, 7:43
1498207596181 - Running, June 23, 7:38
1498841825811 - Running, June 30, 8:30
1499006027756 - Cycling, July 2, 16:05
1499410656446 - Running, July 7, 7:53
1499708334922 - Running, July 10, 7:51
1499842731670 - Running, July 12, 7:49
1500274466109 - Running, July 17, 7:53

Il primo numero è quello che c'è nel tag descritto sopra. Dopo il trattino c'è quello che mi restituisce la pagina HTML di SportsTracker relativa a quel Workout

Grazie in anticipo, Mario
Titolo: Re:[OT] Conversione date
Inserito da: xinyiman - Luglio 18, 2017, 02:12:33 pm
Così a naso sembrerebbero date espresse in total second. Cioè i secondi passati da una data specifica a quella data espressa. Però onestamente è solo un presentimento
Titolo: Re:[OT] Conversione date
Inserito da: bonmario - Luglio 18, 2017, 04:03:42 pm
All'inizio ci avevo pensato pure io, ma ciò che mi spiazza, è l'osservazione delle ultime 2 righe: all'interno dello stesso anno e dello stesso mese, passa da un numero che inizia per "1499" ad uno che inizia per "1500". Mi aspettavo che le "cifre più alte" rimanessero uguali all'interno dello stesso anno, ma qui l'unica che non cambia è la prima !

Grazie, Mario
Titolo: Re:[OT] Conversione date
Inserito da: xinyiman - Luglio 19, 2017, 08:13:31 am
Ciao Bon Mario, le due date che ti sconvolgono sono invece quelle che ti danno la conferma. Si tratta di date e ore espresse in millisecondi. Infatti se fai

(1500274466109 - 1499842731670)  / 1000 ottieni il numero di secondi di differenza

se poi il risultato lo dividi per 60 ottieni i minuti di differenza

se poi il risultato lo dividi per 60 ottieni le ore di differenza

se poi il risultato lo dividi per 24 ottieni i giorni di differenza

che sono 4 giorni e rotti esattamente la data espressa.
Titolo: Re:[OT] Conversione date
Inserito da: bonmario - Luglio 19, 2017, 09:43:56 am
Hai ragione, usano lo stesso sistema che viene usato in Linux: ognuno di quei numeri è la differenza in millesimi di secondo dalla mezzanotte del 01/01/1970.

Grazie, Mario
Titolo: Re:[OT] Conversione date
Inserito da: xinyiman - Luglio 19, 2017, 10:04:20 am
Figurati, quando si può. Considera solo il 3d risolto.
Titolo: Re:RISOLTO: [OT] Conversione date
Inserito da: bonmario - Luglio 19, 2017, 10:43:54 am
Ok, grazie ancora, Mario
Titolo: Re:RISOLTO: [OT] Conversione date
Inserito da: nomorelogic - Luglio 19, 2017, 04:07:08 pm
date un'occhiata anche a questa
https://www.freepascal.org/docs-html/rtl/dateutils/unixtodatetime.html

in teoria dovrebbe essere una funzione pronta all'uso
Titolo: Re:RISOLTO: [OT] Conversione date
Inserito da: bonmario - Luglio 19, 2017, 05:20:28 pm
UnixToDateTime va bene, a patto di dividere prima il n° per 1000, perché quella funzione non tiene conto dei millesimi di secondo.

Grazie, Mario