2010-09-02 14 views
5

Ho uno strano requisito aziendale per l'output delle date dall'01: 00 alle 24:00, invece delle solite 00:00 fino alle 23:00. È davvero un requisito pazzesco, ma sfortunatamente non penso di poterlo evitare.Come rappresentare un formato .NET DateTime di 24 ore in 01-24 anziché in 00-23?

Questa sarà un'opzione di configurazione nel nostro software, quindi avrò ancora bisogno di supportare anche il normale 00-23, quindi spero di poterlo fare in qualche modo con le stringhe di formato. Ma sto anche pensando di usare una regex per post-processare la stringa dei risultati se questo rende più facile.

Grazie!

+1

Quindi, in altre parole, è necessario visualizzare 24: XX invece di 00: XX e nient'altro cambia, è così? – zneak

+0

Ha bisogno di visualizzare 24: XX ma la svolta deve anche essere mostrata dalla data precedente. Per esempio. 9/7/2010 00:00 dovrebbe essere visualizzato come 9/6/2010 alle 24:00. – randbrown

risposta

2

Questo suona come un buon candidato per una classe wrapper che viene utilizzato per formattare il DateTime in base alle regole di business:

public class BusinessDateTimeFormatter 
{ 
    public BusinessDateTimeFormatter(DateTime dateTime) 
    { 
     _dateTime = dateTime; 
    } 

    public override string ToString() 
    { 
     return String.Format("{0} {1}:{2}", _dateTime.Date, _dateTime.Hour + 1, _dateTime.Minute); 
    } 
} 

In alternativa, e forse anche più correttamente, è possibile creare un tipo che rappresenti l'idea aziendale di un DateTime. Nella progettazione orientata agli oggetti, questa sostituzione di tipi primitivi con tipi personalizzati avviene frequentemente, dal momento che il dominio da modellare presenta restrizioni speciali proprio come questa che descrivi.

+0

Un formattatore cliente per una data sembra la soluzione giusta per me. Lo stai incapsulando e dal nome è chiaro perché è stato fatto – JonWillis

+0

Ho finito per fare qualcosa sulla falsariga di questo suggerimento - una semplice classe di business per gestire la formattazione. Ho scelto questo approccio perché al momento è richiesto solo in un'area della mia applicazione, quindi per ora era la soluzione più semplice. Se diventa necessario in altre aree di funzionalità dell'app, potrei prendere in considerazione l'implementazione di un formattatore personalizzato più robusto o qualcosa del genere. – randbrown

3

Estendere .NET creando il proprio provider di formato: http://msdn.microsoft.com/en-us/library/0asazeez(VS.71).aspx

+0

Non penso che sia un'idea particolarmente buona. La responsabilità di IFormatProvider è quella di formattare in base a una cultura, non a regole di business. Mentre funzionerebbe, sta deformando la responsabilità di tale interfaccia e il sovraccarico corrispondente. Poiché si tratta di una preoccupazione aziendale, la logica dovrebbe andare nel modello. – codekaizen

+1

@code - Non sono d'accordo. Fondamentalmente sta creando una cultura personalizzata, non definendo la logica di business (sta usando il comportamento standard di 'DateTime', semplicemente mostrando il valore in modo diverso all'utente). Questo è esattamente ciò che è "IFormatProvider". –

+0

@ Jon B - In che modo la logica aziendale personalizzata è una cultura? Dichiara specificamente che questo è un requisito aziendale. – codekaizen

Problemi correlati