La modifica della regola dell'ora legale ha invalidato la libreria di runtime C?

StackOverflow https://stackoverflow.com/questions/275952

  •  07-07-2019
  •  | 
  •  

Domanda

Qualche tempo fa ho messo insieme una libreria basata sul tempo che poteva essere utilizzata per elaborare i tempi relativi entro un anno per qualcuno. Ho notato in quel momento, che ha fatto il turno di un'ora in entrambe le direzioni per l'ora legale. Mi è appena venuto in mente che Il Congresso ha cambiato le regole sull'ora legale . Non ricordo di aver visto alcuna informazione sugli aggiornamenti per risolvere il cambiamento negli algoritmi. Qualcuno ha qualche informazione su questo argomento?

È stato utile?

Soluzione

La maggior parte dei sistemi simili a Unix utilizzano il database Olson tz per le informazioni sul fuso orario:

http://www.twinsun.com/tz/tz-link.htm

Le modifiche alle regole statunitensi sul fuso orario sono state implementate nella versione 2005l del database tz.

Altri suggerimenti

Per Visual Studio 2005 e versioni precedenti, Microsoft ha rilasciato versioni aggiornate delle librerie di runtime C. Ulteriori informazioni sono disponibili qui .

Su quale piattaforma stai lavorando?

Poiché il Congresso non stabilisce le regole per tutto il mondo :) esiste da tempo un meccanismo per specificare in modo flessibile le regole su Unix / Linux

Vedi, ad esempio, http://www.manpagez.com/man/8 / zic / per il formato dei file. Il tuo sistema particolare potrebbe aver bisogno di una definizione aggiornata per le nuove regole (se la distribuzione non l'ha già gestita)

Per Windows, MS inserisce alcune regole e rilascia aggiornamenti quando le cose cambiano.

Per i MacO, non ne ho idea, ma immagino che erediti il ??modo Unix di fare le cose.

Ma in tutti questi casi, non dovrebbe essere necessaria alcuna modifica alla libreria C

In una nota più generale, il runtime C utilizza i file di dati interni per mappare dalla rappresentazione temporale interna alla locale dell'utente. Queste mappature vengono aggiornate periodicamente dai rispettivi fornitori per adeguarsi alla normativa vigente.

Poiché gli orologi interni devono essere impostati su UTC, l'ora legale è solo una questione di cambiare fuso orario. Ad esempio, nel mio paese, il 26 ottobre il mio Mac è passato dal CEST (ora legale dell'Europa centrale) al CET "normale" (ora dell'Europa centrale). Il display del mio orologio è cambiato, ma non l'ora del computer.

http://www.timeanddate.com/library/abbreviations /timezones/eu/cest.html

In effetti questo significa che devi assolutamente mantenere le tue variabili datetime in UTC o in un formato nativo che tenga conto del fuso orario. Ecco perché registrare semplicemente il datetime come "AAAAMMGGHHMMSS" stringa, è un bug in attesa di accadere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top