Domanda

La mia applicazione richiede funzionalità di impostazione dell'ora e della data personalizzate. Ho controllato sia le librerie in terapia intensiva che boost :: data_time. Entrambi sembrano soddisfare le mie esigenze dal punto di vista della completezza. Vorrei sapere se c'è qualche preferenza tra le due e su quale base? Quale segnerà le prestazioni?

È stato utile?

Soluzione

Senza ulteriori informazioni sul tuo caso d'uso e ambiente specifici, non c'è modo di dare una risposta definitiva sul fatto che una delle biblioteche supera l'altra. Come suggerito da Xeo, la profilazione è il modo migliore per affrontare le preoccupazioni delle prestazioni.

Se il caso d'uso include manipolazione "generale" da data/ora (cioè., non conosci ancora lo spettro completo delle operazioni di data/ora di cui hai bisogno), ci sono alcune scelte che devi fare. Come la Boost.DateTime Documentation spiega, hai una scelta tra queste tre capacità:

  1. Accordo esatto con il tempo di cima a parete
  2. Calcoli accurati tra istanti di tempo
  3. Capacità di gestire gli istanti di tempo in futuro

Uno dei motivi per cui nessuna biblioteca può implicitamente gestire tutti e tre contemporaneamente è che la determinazione del tempo di risparmio della luce del giorno esiste in un determinato istante dipende dalla giurisdizione, dalle sue questioni politiche e da una serie di altri fattori. Pertanto, i calcoli che coinvolgono date future possono diventare inaccurati.

Nel decidere tra queste capacità, noterai che la geografia e la localizzazione svolgono un ruolo importante. Se, ad esempio, i requisiti della data/ora devono supportare solo una singola locale, non c'è motivo giustificabile per introdurre la grande libreria ICU come dipendenza. Ma probabilmente non dovresti usare boost.DateTime, neanche: come biblioteca aambostica locale, ignora il fatto che il primo giorno della settimana varia in base al locale. Inoltre, il supporto del fuso orario di Boost.DateTime è rotte; Il software più moderno utilizza il Database Olson per l'elaborazione e le conversioni del fuso orario. Invece, probabilmente dovresti considerare Boost.locale Quando si utilizza Boost per lavorare con date, tempi e calendari.,

Per impostazione predefinita, boost.locale Utilizza ICU per tutte le attività di localizzazione, ma offre la possibilità di utilizzare i back-end di localizzazione non basati su ICU. Quindi, se non stai usando Boost altrove (per qualsiasi motivo) e hai bisogno di supportare i fusi orari oltre gli attuali fusi orari del sistema operativo e le fusi orari spostati dall'UTC (ignorando il tempo di risparmio della luce del giorno), quindi usa solo la terapia intensiva. Se stai usando Boost altrove, hai una scelta tra boost.locale e ICU, ma le differenze sono minime (alla fine è inclusa l'ICU, quindi è davvero una domanda stilistica e di coerenza). La scelta finale sorge quando non si utilizza Boost altrove e hai a che fare solo con le date nel fuso orario del sistema operativo (o modifiche della data usando un a priori Offset noto dall'UTC). In tal caso, probabilmente dovresti usare boost.locale.datetime, ma senza il supporto in terapia intensiva.

Riepilogo

  • Non usare boost.DateTime per due motivi: (1) il suo supporto di fuso orario è rotto; e (2) ignora il fatto che i calcoli del "giorno della settimana" dipendono dal locale. Usa invece boost.locale.datetime.
  • Se stai usando Boost altrove, continua a usarlo. Includerà automaticamente i back-end di localizzazione basati su ICU. In alternativa, puoi invocarli direttamente (includendo direttamente l'ICU), ma non c'è alcuna differenza.
  • Se tu sei non Usando Boost altrove, la scelta dipende dal fatto che il caso d'uso sia indipendente dalla località. Se è indipendente dalla località, è possibile utilizzare i backup di localizzazione non basati su ICU di Boost.Locale.DateTime (per esempio, std, posix) ed evita il sovraccarico di terapia intensiva. In alternativa, se il caso d'uso dipende dalla locale, è possibile utilizzare la terapia intensiva senza introdurre le spese generali di Boost.
  • Sull'esibizione: la profilazione è l'unico modo per saperlo.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top