Migliore rappresentazione per date e durate relative

5

Uso ISO 8601 per rappresentare date e amp; durate e tutto è OK. Ma ora ho bisogno di rappresentare date e durate relative come:

  • La data del primo giorno, a mezzanotte, della settimana successiva
  • Tutto il periodo dell'ultimo mese.

In effetti ho bisogno di avere una sintassi per questo, preferisco uno standard. Non ho bisogno di codice (ho ancora tutto il codice), ma una sintassi per memorizzare la data o la durata dei parenti come ISO 8601 usa "P1Y2M10DT2H30M" per una durata.

Grazie ...

    
posta philnext 24.05.2011 - 16:26
fonte

3 risposte

5

Non è uno standard, ma una convenzione utilizzata da FogBugz e Jira (entrambi i bugtrackers) consiste nell'inserire le durate in termini semplici come 2d per 2 giorni, 3w per 3 settimane, 1m per 1 mese, ecc.

La convenzione potrebbe essere estesa per date e periodi relativi ad un'altra data (solitamente la data corrente che presumo).

  • oggi + 2 giorni: + 2d
  • oggi un anno fa: -1y
  • prossima domenica: + 1Sun (usa i nomi dei giorni della settimana che dovrebbero ovviamente essere specifici per la locale)
  • il 15 del mese prossimo: + m15 o + 1m15
  • 20 del precedente: -1m20
  • l'ultimo del mese successivo: + 1mL (L indica l'ultimo giorno del mese / settimana / trimestre / semestre / anno, utilizzato una L maiuscola per distinguerlo dal numero 1 in molti tipi di carattere)

Per specificare periodi invece di solo date, puoi raddoppiare le lettere:

  • tutto il mese scorso: -1mm
  • tutta la prossima settimana: + 1ww
  • tutto l'anno scorso: -1yy

Per specificare un periodo tra due date relative specifiche:

  • 15 del mese successivo al 20 del mese successivo a quello: + m15 .. + 2m20
  • tutto il mese scorso potrebbe anche essere specificato come: -1m1 ..- 1mL

L'analisi potrebbe diventare un'attività interessante ...

    
risposta data 24.05.2011 - 21:10
fonte
1

Se capisco cosa intendi correttamente, desideri avere un modo per dire DateTime.NextSunday? Se è così, per quanto ne so non esiste uno standard che puoi usare per quello.

I due esempi che hai fornito sopra sono esempi specifici di una data che ti serve. Dovresti comunque esprimere l'ora usando lo standard ISO, devi solo definire prgrammaticamente cosa significa ciascuno.

Come farei questo nella mia interfaccia utente, avrei un pulsante chiamato "Settimana prossima". Qui in Canada, il primo giorno della settimana è domenica, ma non è lo stesso per tutti. Quindi scriverei il mio codice in questo modo (c # è la mia lingua preferita):

DateTime today = DateTime.Now;
int daysToSunday =  (DayOfWeek.Sunday - DateTime.Now.DayOfWeek) + 7;
DateTime weekStart = today.Date.AddDays(daysToSunday);

Nota, non ho provato questo, solo una veloce scrittura.

Tuttavia, è morale, per un concetto di tempo come quelli che hai affermato sopra, devi codificare una soluzione per arrivare a quelle date.

    
risposta data 24.05.2011 - 17:51
fonte
1

Nel mondo Java Joda Time supporta questo tipo di operazione rispetto al tuo locale, il che significa che si regola automaticamente per piccole differenze culturali se ne hai bisogno.

Ad esempio potresti creare un DateTime che è assoluto ( oggi) e aggiungere un periodo relativo ( today.plusDays(7) per aggiungere una settimana per esempio). Inoltre supporta molti modi per trasmettere questo concetto di durata relativa in base al tuo caso d'uso.

Se non usi Java, ti suggerisco comunque di guardarlo per vedere cosa cercare in una buona libreria di gestione del calendario per il tuo ambiente o darti l'ispirazione per crearne uno tuo.

Attenzione però se decidi di andare su misura, il tempo e le date sono concetti semplici ma solo superficiali. Ci sono molti aggiustamenti che devono essere fatti al tempo in background per mantenerlo assoluto (un secondo è un secondo) e relativo (a mezzogiorno il sole dovrebbe essere al suo zenith) nature in dai un'occhiata. Creare la propria implementazione è semplice fino a quando non si ottengono errori quando si tratta di cose simili, si combinano il microsecondo o più precisione dei computer e il loro tratto autistico assoluto sono piuttosto inetti quando si tratta di concetti sfocati che noi umani diamo per scontati. p>

Spero che questo sia stato di aiuto!

    
risposta data 24.05.2011 - 18:10
fonte

Leggi altre domande sui tag