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?

Tyler Durden
fuente
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 ()

Theofanis Pantelides
fuente
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).

Marc Gravell
fuente
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.

panpawel
fuente
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.

pesado
fuente
+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
11

Prueba esto:

TimeSpan TodayTime = DateTime.Now.TimeOfDay;
Javier Andres Caicedo
fuente
6

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

tarakaram gopal
fuente
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");
Kishan Gupta
fuente
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.

chrysanly
fuente
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
Görkem Hacıoğlu
fuente
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;
ProfK
fuente
3

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

esteras
fuente
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}"/>
Bipul Roy
fuente
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.

Hugoware
fuente
1

También debe tener en cuenta DateTime Kind.

public static DateTime GetTime(this DateTime d)
{
    return new DateTime(d.TimeOfDay.Ticks, d.Kind);
}
usuario3720899
fuente
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