Как получить только время из даты и времени 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
11

Попробуй это:

TimeSpan TodayTime = DateTime.Now.TimeOfDay;
Хавьер Андрес Кайседо
источник
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(); 

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

Chrysanly
источник
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);

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

Hugoware
источник
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);
}
user3720899
источник
Нет смысла отвечать на этот вопрос, он был задан 9 лет назад. И на этот вопрос уже есть много хороших ответов.
benshabatnoam
Вы не вернете время. Вы должны пересмотреть свой ответ
Yepeekai
@Yepeekai В .NET нет класса Time. Таким образом, экземпляр DateTime без части Date - это один из возможных вариантов. Вы также можете вернуть строку, но можете использовать ее в операциях DateTime. Думаю, вы тоже могли бы рассмотреть TimeSpan.
user3720899 04
imo, «new DateTime (d.TimeOfDay.Ticks)» - самый чистый ответ на данный момент
Fabianus