08/04/2024 - al.delphi ha scritto:
Di seguito le proprietà Windows di un file decompresso con Abbrevia e [TZipFile]
Credo che la problematica sia dovuta a un problema insito nel formato ZIP in sé, che non salva nativamente la timezone di riferimento.
Provo a spiegare.
Da quello che ho potuto leggere dalla documentazione del formato, la data di creazione e ultima modifica è salvata nello ZIP con un formato numerico intero (che è il classico formato UNIX), così come hai potuto vedere.
Tale valore può essere convertito in data/ora, ma non contiene in sé una informazione relativa alla “timezone”, ossia non è indicato - salvo specificarlo da qualche parte - se si tratta di una data/ora UTC, oppure se espressa con GMT+0 o un altro riferimento.
Se apri lo ZIP in Windows, credo che aggiunga un'ora per via delle impostazioni internazionali e rimuove quell'ora quando si crea lo ZIP; tuttavia, questa valutazione è arbitraria, nel senso che modificando la timezone nel Pannello di Controllo, probabilmente otterrai una visualizzazione di un'ora diversa (se l'archivio è stato creato con un'altra timezone).
Se apri l'archivio con 7-zip, troverai una situazione ancora diversa. Infatti, alcuni lamentano che non gestisce l'ora legale. L'output mostrato è effettivamente lo stesso che si ottiene con la classe TZipFile di Delphi.
In breve, la data/ora credo si possa garantire se la creazione dell'archivio e la sua estrazione vengono fatti dal medesimo “pezzo di software”. In caso contrario, è necessario entrare nel merito di come ogni gestore del formato valuta la zona temporale di riferimento della data/ora che viene caricata dall'header del file ZIP.
Temo che le implementazioni alternative di TZipFile che hai usato adottino solo incidentalmente le stesse convenzioni di Windows, ma potrebbero cambiare un domani (ad esempio, se non siamo più in regime di ora legale). Sarebbe da provare.
Dal mio punto di vista, se queste premesse sono effettive, la data/ora di creazione e/o ultima modifica caricata dallo ZIP è una informazione sulla quale non si può fare affidamento se questo valore temporale costituisce una rilevanza specifica e sensibile nella logica applicativa.