Как получить только время из даты и времени C # [закрыто]


148

Предположим, у меня есть значение 22.06.2009 10:00:00. Как мне получить только 10:00 утра с этой даты.


15
Это строка или DateTime?
Colin Burnett

Ответы:


212

Для этого есть много вариантов:

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

Полезная ссылка: Шаблоны DateTime.ToString ()


18
@MetroSmurf - ОП, конечно, непонятно, что он хочет делать. Одно из моих любимых ненавистников - слишком рано ходить на струны. У меня был коллега, который преобразовал все в струны - даже двойники и т. Д. Это случайность, ожидающая своего часа. Я бы сказал, не преобразовывайте объекты в строки, пока вы не захотите отобразить объект человеку. А пока держитесь за предметы.
Павел

1
Для справки, ssэто секунды с ведущим нулем и sсекунды без
Beevee

лучший ответ на данный момент
Tk1993 07

76

Из a DateTimeвы можете использовать .TimeOfDay- но это дает вам TimeSpanпредставление о времени дня (10 часов).


или особые случаи с форматированием ToString («коды формата»)
Кенни

62

В C # есть только тип DateTime, который состоит как из даты, так и из времени. Если вам не важна часть Date в DateTime, установите для нее значение по умолчанию, например:

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

Таким образом, вы можете быть последовательны во всех версиях .NET, даже если Microsoft решит изменить базовую дату на что-то другое, кроме 1/1/0001.


21
Это должен быть принятый ответ. Вопрос состоял в том, чтобы извлечь время из DateTime, а не форматировать его как строку.
ASalazar

В частности, это «в .NET», а не «в C #».
rory.ap

22

Возможно, вы захотите изучить метод DateTime.ToShortTimeString () .

Кроме того, в объекте DateTime есть много других методов и свойств, которые могут помочь вам в формировании даты или времени любым удобным для вас способом. Просто взгляните на документацию.


+1 Это самое чистое решение, если вы работаете в международной среде с требованием локализации вывода времени, поскольку оно возвращает время в том формате, в котором установлена ​​текущая система.
Агатон 05


6

Это можно сделать разными способами. Вы можете использовать, DateTime.Now.ToLongTimeString()который возвращает только время в строковом формате.


Вы, вероятно, имели в виду, DateTime.ToLongTimeString()а не DateTime.Now.ToLongTimeString(). Учитывая возраст этой цепочки, лучше не воскрешать ее, если только ответ не способствует значительному улучшению по сравнению с предыдущими ответами.
Leigh

5

Вы можете просто написать

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

4
это абсолютно ничего не добавляет к тому, что уже было отправлено более 4 лет назад!
Павел

5

Вы можете использовать это

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

Это в реальном времени со значением в миллисекундах и устанавливается только по времени.


TimeOfDay - хороший способ, но он также содержит миллисекунды, которые вам нужно отформатировать стандартным шрифтом.
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

У меня это работает. Я обнаружил это, когда мне пришлось работать с DateTime.Date, чтобы получить только часть даты.

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

3

Можно использовать ToString("T")как долго, так и ToString("t")непродолжительно.


1

Если вы хотите сравнить время, а не даты, у вас может быть просто стандартная дата сравнения или совпадение с датой, которую вы используете, как в ...

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

Могут быть лучшие способы сделать это, но ваши даты должны совпадать.


1

если вы используете gridview, вы можете показать только время на DataFormatString="{0:t}" примере:

    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

Вам также необходимо учитывать DateTime Kind.

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

Нет смысла отвечать на этот вопрос, он был задан 9 лет назад. И на этот вопрос уже есть много хороших ответов.
benshabatnoam

Вы не вернете время. Вы должны пересмотреть свой ответ
Yepeekai

@Yepeekai В .NET нет класса Time. Таким образом, экземпляр DateTime без части Date - это один из возможных вариантов. Вы также можете вернуть строку, но можете использовать ее в операциях DateTime. Думаю, вы тоже могли бы рассмотреть TimeSpan.
user3720899 04

imo, «new DateTime (d.TimeOfDay.Ticks)» - самый чистый ответ на данный момент
Fabianus
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.