2012-01-03 11 views
5

In Delphi XE2 generato automaticamente numeri di build funzionalità ora usa un qualche tipo di data e valori di tempo generato, in questo modo:I nuovi numeri di build autogenerati Delphi XE2 sono collegati a 1.1.2000 00:00:00?

2.4.4386.838

Gli ultimi due numeri cambiano ogni volta che si genera e si basano sul la data e l'ora correnti:

Major = 2 (user defined) 
Minor = 4 (user defined) 
Release = 4386 (number of days since Jan 1 2000) 
Build = 838 (number of seconds since 00:00:00) 

credo che questo nuovo formato per il rilascio e numeri di build stato preso in prestito dalla realizzazione NET che fa qualcosa di molto simile. In .net, l'ultimo numero (Build) è uguale al numero di secondi dall'ora locale di mezzanotte, diviso per 2. Vedere questo link per i dettagli sull'implementazione .net: Determining Build Date the hard way

Se questo può essere invocato per rimanere questo a proposito, poi ora abbiamo un modo migliore per determinare il tempo di compilazione, invece di

  1. Utilizzare i plugin IDE

  2. Utilizzando PE intestazioni Hacks

Le domande non sono come tornare alla funzionalità dei numeri di versione del vecchio autoincremento.

Le domande sono XE2 utilizza realmente la data e l'ora come ho mostrato sopra, a partire dal 1 gennaio 2010 e aggiungendo giorni e secondi nei numeri di build e di rilascio?

+0

La risposta che stai cercando può essere trovato in risposta di TOndrej qui: http://stackoverflow.com/questions/8437300/how-can -i-automatizzare-ottenere-the-date-di-build-in-a-costante-visibile-to-my-codice –

+0

@ David la questione punte è su come farlo da soli. Le mie domande sono se Delphi XE2 sta facendo questo per noi e dovremmo sbarazzarci dei suggerimenti esattamente menzionati nella domanda che hai indicato. Credo che le mie domande siano un po 'diverse. –

+1

Immagino di non aver capito la spinta principale della tua domanda. Pensi che il backup delle risorse della versione sia più semplice? Non è possibile visualizzare alcuna documentazione che indichi come sono impostati Build e Release?Hai discernuto questo con l'osservazione presumibilmente? Sai che fuso orario è usato? UTC? Ora locale? –

risposta

7

La codifica non può essere quello che pensi sia. La versione e i numeri sono raggruppati in un singolo 32 bit DWORD. Ciò significa che sono disponibili solo 16 bit per tutti i secondi in un giorno. Ci sono 86400 secondi in un giorno che è maggiore di 2 .

Piuttosto stranamente, l'implementazione Delphi sembra avvolgersi quando raggiunge 2 secondi, ~ 18,2 ore. Quindi, al momento, sono le 22:50 del fuso orario (UTC), ma il numero di rilascio generato automaticamente è 16753, ovvero circa 4,6 ore. Aggiungendo le 18.2 ore mancanti dal wrap around e dal bingo, sono le 22:50.

Sembra che le persone di Visual Studio abbiano capito bene, perché hanno preso il numero di secondi dopo 00:00 e diviso per 2. Sembrerebbe inoltre che i numeri di rilascio generati automaticamente da Delphi non saranno monotone aumentando nel tempo , non sarà unico e così via.

Questo mi sembra essere un bug che ho presentato come QC#102343. Si noti che il bug è stato introdotto nell'aggiornamento XE2 3. Non era presente nelle versioni precedenti. Si noti inoltre che la gestione del numero di release è cambiato da aggiornamento 2 per aggiornare 3.

+0

Dovrebbe essere (numero di secondi da mezzanotte) div 2. Ciò rende il massimo 43200, che si adatta a 16 bit. Se è avvolgente, è sicuramente un bug. –

+0

@ Allen hmm, la mia prova rapida sembrava avvolta come puoi vedere. Devo inviare un controllo di qualità o puoi prenderlo da qui. –

+0

Meglio che tu lo invii ... poi ottieni il credito e puoi seguirlo. –