2009-08-20 21 views
6

cuando obtengo la propiedad DateTime.Hour, siempre obtengo el tiempo de 24 horas (por lo que a las 6PM me daría 18).cómo obtener la fecha de 12 horas de DateTime

¿Cómo llego el tiempo de "12 horas", por lo 18:00 sólo me da 6.

i, obviamente, puede hacer lo mismo cheque, pero asumo que hay una función integrada para esto.

+0

que sólo le puede pedir, o ¿quiere decir DateTim * e *? –

+0

Sin embargo, si haces esto, ¿cómo puedes comparar las horas de la mañana y la noche? – ThePower

+0

no necesito para este control. . . ya que hay cuadros de texto separados para "Hora" "Min" "AM/PM". voy a mover esto a un control de calendario para que sea más simple ya que todo esto es código heredado – leora

Respuesta

15

¿Qué tal:

DateTime.Hour % 12 

que dará a 0-11 por supuesto ... ¿Quieres 1-12? Si es así:

((DateTime.Hour + 11) % 12) + 1 

yo no creo hay algo más simple construido en ...

1

No hay ninguna función integrada, sobre todo porque no lo necesita:

  • Si está haciendo esto para la salida del usuario, mire usando una cadena de formato.
  • Si está haciendo esto para un cálculo, puede restar fechas o agregar espacios de tiempo directamente.

Fuera de esto, el cálculo matemático es bastante simple y ya está disponible en otras respuestas aquí.

+0

estoy haciendo comparaciones de horas en comparación con un número entero que obtengo de otra fuente de datos (que obviamente solo viene en 12 horas) – leora

+1

¿No debería convertir esa otra fuente a una fecha y hora? Ciegamente comparar 12 horas es peligroso. –

5

DateTime.Now.ToString ("hh"); -> Al usar esto obtendrás "06" por 18h.

3

No conozco ningún método integrado, pero siempre puede agregar un método de extensión para lograr esto.

Por supuesto, siempre puede reemplazar el código con la forma en que desea lograrlo.

public static class Extension 
{ 
    public static int GetTwelveCycleHour(this DateTime dateTime) 
    { 
     if (dateTime.Hour > 12) 
     { 
      return dateTime.Hour - 12; 
     } 

     return dateTime.Hour; 
    } 
} 
+2

Hora% 12 es más simple –

+0

Me di cuenta de que después de publicar mi respuesta, entonces agregué el comentario "Por supuesto, siempre puede reemplazar el código con la forma en que desea lograrlo". Mi punto principal es que esta pregunta para mí suena como un buen candidato para un método de extensión. –

+0

No quería simplemente estafar la respuesta de Jon Skeet en la mía, así que solo agregué el comentario y no cambié el código. –

2

¿Qué pasa simplemente:

public static int GetTwelveCycleHour(this DateTime dateTime) 
{ 
    return Convert.ToInt32(dateTime.ToString("h")); 
} 
+1

¿Formateo y análisis? Esto hará el truco, pero es un desperdicio innecesario de ciclos de CPU. Guarde el formato para mostrar la salida y el análisis para manejar la entrada del usuario. Estás mucho mejor con la respuesta de Jon Skeet. – MCattle

+1

No estoy seguro acerca de la versión de C# que está utilizando pero en C# 5 esto arroja una excepción de formato no válido. debe ser ToString ("% h"); –

+1

@BenPretorius Estás en lo correcto. – Eternal21

Cuestiones relacionadas