Como obter apenas tempo da data e hora em C # [fechado]


144

Suponha que eu tenha o valor 22/06/2009 10:00:00. Como obtenho apenas 10:00 da manhã a partir desta data.


15
Isso é uma string ou um DateTime?
Colin Burnett

Respostas:


202

Você tem muitas opções para isso:

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

Link útil: DateTime.ToString () Patterns


16
@ MetroSmurf - o OP, claro, não está claro o que ele quer fazer. Um dos meus animais de estimação odeia é ir para as cordas muito cedo. Tive um colega que converteu tudo em string - até dobra etc. É um acidente esperando para acontecer. Eu diria que não converta objetos em seqüências de caracteres até que você queira exibir o objeto em um ser humano. Até lá, fique com os objetos.
paul

1
Para referência rápida, ssé segundos com um zero à esquerda e sé segundos sem
Beevee

melhor resposta até agora
Tk1993

76

Em a DateTime, você pode usar .TimeOfDay- mas isso TimeSpanrepresenta a hora do dia (10 horas).


ou casos especiais com formatação em ToString ( "códigos de formato")
Kenny

61

Há apenas o tipo DateTime em C # e ele consiste na parte da data e da hora. Se você não se importa com a parte Date do DateTime, defina-o como valor padrão como este:

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

Dessa forma, você pode ser consistente em todas as versões do .NET, mesmo que a Microsoft decida alterar a data base para algo diferente de 1/1/0001.


19
Essa deve ser a resposta aceita. A questão era extrair o tempo de um DateTime, não formatá-lo como uma string.
ASalazar

Especificamente, é "no .NET" e não "no C #".
Rue.ap 30/07/19

22

Você pode procurar no método DateTime.ToShortTimeString () .

Além disso, existem muitos outros métodos e propriedades no objeto DateTime que podem ajudá-lo a formatar a data ou a hora da maneira que desejar. Basta dar uma olhada na documentação.


+1 Esta é a solução mais limpa, se você estiver executando em um ambiente internacional com exigência de localização da saída de hora, pois ela retorna a hora em qualquer formato no qual o sistema atual tenha sido definido.
precisa saber é


6

Existem diferentes maneiras de fazer isso. Você pode usar o DateTime.Now.ToLongTimeString()que retorna apenas a hora no formato de sequência.


Você provavelmente quis dizer DateTime.ToLongTimeString()mais do que DateTime.Now.ToLongTimeString(). Dada a idade desse segmento, é melhor não ressuscitá-lo, a menos que a resposta contribua com uma melhoria significativa em relação às respostas anteriores.
Leigh

5

Você pode simplesmente escrever

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

4
isso não acrescenta absolutamente nada ao que já foi enviado há mais de 4 anos!
paul

5

Você pode usar isso

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

É em tempo real, com valor de milissegundos, e é definido apenas para o tempo.


TimeOfDay é uma boa maneira, mas também traz parte de milissegundos. Você precisa formatar seu tempo com o tipo padrão.
precisa saber é

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

Isso funciona para mim. Descobri isso quando tive que trabalhar com o DateTime.Date para obter apenas a parte da data.

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

3

Você pode usar ToString("T")por muito tempo ou ToString("t")por pouco tempo.


2

se você estiver usando o gridview, poderá mostrar apenas o horário com o DataFormatString="{0:t}" exemplo:

    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

Se você deseja comparar horários, e não datas, pode ter apenas uma data de comparação padrão ou corresponder à data que está usando, como em ...

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

Pode haver maneiras melhores de fazer isso, mas mantém as datas correspondentes.


1

Você também deve considerar o DateTime Kind.

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

Não faz sentido responder a essa pergunta, foi feita 9 anos atrás. Também existem muitas boas respostas para essa pergunta.
benshabatnoam

Você não está retornando a hora. Você deve revisar sua resposta
Yepeekai 28/11

@Yepeekai Não há classe Time no .NET. Portanto, uma instância DateTime sem parte de Data é uma das opções que você pode fazer. Você também pode retornar uma string, mas pode usá-la nas operações DateTime. Eu acho que você também pode considerar um TimeSpan.
user3720899

imo o "novo DateTime (d.TimeOfDay.Ticks)" é a resposta mais limpa até agora
Fabianus
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.