2010-09-02 8 views
5

Tengo un requisito comercial extraño para dar como resultado fechas de 01:00 a 24:00, en lugar de las 00:00 a 23:00 habituales. Realmente es un requisito loco, pero desafortunadamente no creo poder evitarlo.Cómo representar un formato .NET DateTime de 24 horas en 01-24 en lugar de 00-23?

Esta será una opción de configuración en nuestro software, por lo que también tendré que admitir el 00-23 normal, así que espero poder hacerlo de alguna manera con las cadenas de formato. Pero también estoy considerando usar una expresión regular para postprocesar la cadena resultante si eso lo hace más fácil.

Gracias!

+1

En otras palabras, necesita mostrar 24: XX en lugar de 00: XX y nada más cambia, ¿o sí? – zneak

+0

Necesita mostrar 24: XX pero el giro es que también debe mostrarse desde la fecha anterior. P.ej. 9/7/2010 00:00 se debe mostrar como 9/6/2010 24:00. – randbrown

Respuesta

2

Esto suena como un buen candidato para una clase de contenedor que se utiliza para formatear la DateTime de acuerdo con las reglas de negocio:

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); 
    } 
} 

Alternativamente, y quizás aún más correctamente, puede crear un tipo que represente la idea del negocio de DateTime. En el diseño orientado a objetos, esta sustitución de tipos primitivos con tipos personalizados ocurre con frecuencia, ya que el dominio que se modelará tiene restricciones especiales como esta que usted describe.

+0

Un formateador de cliente para una fecha suena como el camino a seguir para mí. Lo estás encapsulando y por el nombre está claro por qué se ha hecho – JonWillis

+0

Terminé haciendo algo en la línea de esta sugerencia: una clase de negocios simple para manejar el formateo. Elegí este enfoque porque actualmente solo se requiere en un área de mi aplicación, por lo que esta fue la solución más simple por el momento. Si se vuelve necesario en otras áreas de características de la aplicación, puedo considerar la implementación de un formateador personalizado más robusto o algo así. – randbrown

3

Extender .NET mediante la creación de su propio proveedor de formato: http://msdn.microsoft.com/en-us/library/0asazeez(VS.71).aspx

+0

No creo que esta sea una idea particularmente buena. La responsabilidad de IFormatProvider es formatear según una cultura, no reglas comerciales. Si bien funcionaría, está deformando la responsabilidad de esa interfaz y la sobrecarga correspondiente. Dado que esto es una preocupación comercial, la lógica debe ir en el modelo. – codekaizen

+1

@code - No estoy de acuerdo. Básicamente está creando una cultura personalizada, sin definir la lógica de negocios (está usando el comportamiento estándar 'DateTime', simplemente mostrando el valor de manera diferente para el usuario). Esto es exactamente para lo que 'IFormatProvider'. –

+0

@Jon B - ¿Cómo es la lógica de negocios personalizada una cultura? Él específicamente declara que este es un requisito comercial. – codekaizen

Cuestiones relacionadas