Ho usato boost :: gregorian :: date un po 'ora.numero di mesi tra due date - utilizzando la data di boost
Vedo che ci sono i mesi correlati & anni & tipi di durata settimane. Riesco a vedere come utilizzare le durate note per far avanzare una determinata data.
Qu: Ma come posso ottenere la differenza tra due date in mesi (o anni o settimane)?
speravo di trovare una funzione simile:
template<typename DURATION>
DURATION date_diff<DURATION>(const date& d1,const date& d2);
Non ci sarebbe bisogno di essere un po 'di movimentazione di arrotondamento troppo.
Questa funzione restituirebbe il numero di (diciamo) interi mesi tra d1 e d2.
Sì, mi dispiace se non fosse chiaro. Intendo il numero di mesi tra due date. (O arrotondato in su o in giù, in qualche modo.) Chiarirò la domanda. BTW, l'ultima riga di codice indica il numero di giorni, non di mesi, giusto? È scritto più chiaramente come num_days piuttosto che mesi? E.g. : int num_days = (date2-date1) .days(); – MartinP
sì, quello è stato il mio errore :) ora è corretto un po '. In realtà se si desidera un numero corretto di mesi per lunghi periodi è meglio usare 365,25/12 anziché 30. –
Grazie per il pensiero, ma mi dispiace, non sono convinto da questo approccio. Qualsiasi trattamento basato su tutti i mesi è di circa la stessa lunghezza e si sbaglia in alcuni casi speciali. Come il caso patologico di febbraio in un anno bisestile. Se ho preso d1 per essere 30 gennaio e d2 per essere 1 marzo, la separazione in giorni sarebbe 28 (in un anno bisestile). Guardando solo a quella cifra di 28 giorni, non possiamo sapere se le due date sono nello stesso mese o eventualmente separate da tutti di febbraio. Ecco perché penso che avremmo bisogno di un calendario gregoriano per calcolare quanti mesi di calendario sono compresi tra due date. – MartinP