Cómo obtener solo el tiempo de fecha y hora C # [cerrado]


144

Supongamos que tengo el valor 22/06/2009 10:00:00 AM. ¿Cómo obtengo solo las 10:00 a partir de esta fecha?


15
¿Es esto una cadena o un DateTime?
Colin Burnett

Respuestas:


202

Tienes muchas opciones para esto:

DateTime dt = DateTime.Parse("6/22/2009 07:00:00 AM");

dt.ToString("HH:mm"); // 07:00 // 24 hour clock // hour is always 2 digits
dt.ToString("hh:mm tt"); // 07:00 AM // 12 hour clock // hour is always 2 digits
dt.ToString("H:mm"); // 7:00 // 24 hour clock
dt.ToString("h:mm tt"); // 7:00 AM // 12 hour clock

Enlace útil: Patrones DateTime.ToString ()


16
@MetroSmurf: el OP no está claro, por supuesto, qué quiere hacer. Una de mis mascotas odia es ir a las cuerdas demasiado temprano. Tuve un colega que convirtió todo en cuerdas, incluso dobles, etc. Es un accidente esperando que suceda. Yo diría que no convierta objetos en cadenas hasta que desee mostrar el objeto a un humano. Hasta entonces quédate con los objetos.
Paul

1
Para referencia rápida, ssson segundos con un cero a la s
izquierda

mejor respuesta hasta ahora
Tk1993

76

Desde a DateTime, puede usar .TimeOfDay, pero eso le da una TimeSpanrepresentación del tiempo del día (10 horas).


o casos especiales con Formateo en ToString ("códigos de formato")
kenny

61

Solo hay un tipo de fecha y hora en C # y consta de la porción de fecha y hora. Si no le importa la parte Fecha de DateTime, configúrela con el valor predeterminado de esta manera:

DateTime myTime = default(DateTime).Add(myDateTime.TimeOfDay)

De esta manera, puede ser coherente en todas las versiones de .NET, incluso si Microsoft decide cambiar la fecha base a algo más que 1/1/0001.


19
Esta debería ser la respuesta aceptada. La pregunta era extraer el tiempo de un DateTime, no formatearlo como una cadena.
ASalazar

Específicamente, es "en .NET" no "en C #".
rory.ap

22

Es posible que desee consultar el método DateTime.ToShortTimeString () .

Además, existen muchos otros métodos y propiedades en el objeto DateTime que pueden ayudarlo a formatear la fecha o la hora de la manera que desee. Solo eche un vistazo a la documentación.


+1 Esta es la solución más limpia, si está ejecutando en un entorno internacional con el requisito de localización de la salida de tiempo, ya que devuelve la hora en cualquier formato en el que se haya configurado el sistema actual.
aggaton


6

Hay diferentes formas de hacerlo. Puede usar DateTime.Now.ToLongTimeString()que devuelve solo el tiempo en formato de cadena.


Probablemente quisiste decir DateTime.ToLongTimeString()más que DateTime.Now.ToLongTimeString(). Dada la antigüedad de este hilo, es mejor no resucitarlo a menos que la respuesta contribuya a una mejora significativa sobre las respuestas anteriores.
Leigh

5

Puedes simplemente escribir

string time = dateTimeObect.ToString("HH:mm");

44
¡Esto no agrega absolutamente nada a lo que ya se envió hace más de 4 años!
Paul

5

Puedes usar esto

lblTime.Text = DateTime.Now.TimeOfDay.ToString(); 

Es en tiempo real con valor de milisegundos y se establece solo en tiempo.


TimeOfDay es una buena manera, pero también trae milisegundos, necesita formatear su tiempo con el tipo estándar.
sajadre

5
DateTime now = DateTime.Now;

now.ToLongDateString();    // Wednesday, January 2, 2019
now.ToLongTimeString();    // 2:33:59 PM
now.ToShortDateString();   // 1/2/2019
now.ToShortTimeString();   // 2:16 PM
now.ToString();            // 1/2/2019 2:33:59 PM

4

Esto funciona para mi. Lo descubrí cuando tuve que trabajar con DateTime.Date para obtener solo la parte de fecha.

var wholeDate = DateTime.Parse("6/22/2009 10:00:00 AM");
var time = wholeDate - wholeDate.Date;

3

Puede usar ToString("T")por mucho tiempo o ToString("t")por poco tiempo.


2

si está usando gridview, puede mostrar solo la hora con un DataFormatString="{0:t}" ejemplo:

    By bind the value:-
<asp:Label ID="lblreg" runat="server" Text='<%#Eval("Registration_Time ", "{0:t}") %>'></asp:Label>

By bound filed:-
<asp:BoundField DataField=" Registration_Time" HeaderText="Brithday" SortExpression=" Registration Time " DataFormatString="{0:t}"/>

1

Si está buscando comparar tiempos, y no las fechas, podría tener una fecha de comparación estándar, o coincidir con la fecha que está utilizando, como en ...

DateTime time = DateTime.Parse("6/22/2009 10:00AM");
DateTime compare = DateTime.Parse(time.ToShortDateString() + " 2:00PM");
bool greater = (time > compare);

Puede haber mejores formas de hacerlo, pero mantiene sus fechas coincidentes.


1

También debe tener en cuenta DateTime Kind.

public static DateTime GetTime(this DateTime d)
{
    return new DateTime(d.TimeOfDay.Ticks, d.Kind);
}

No tiene sentido responder a esta pregunta, se hizo hace 9 años. También hay muchas buenas respuestas a esta pregunta ya.
benshabatnoam

No estás devolviendo el tiempo. Deberías revisar tu respuesta
Yepeekai

@Yepeekai No hay clase de tiempo en .NET. Por lo tanto, una instancia de DateTime sin porción de fecha es una de las opciones que puede hacer. También puede devolver una cadena, pero puede usarla en las operaciones DateTime. Supongo que también podrías considerar un TimeSpan.
user3720899

En mi opinión, el "nuevo DateTime (d.TimeOfDay.Ticks)" es la respuesta más clara hasta ahora
Fabianus
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.