Як отримати лише час від дати C # [дата] закрито]


144

Припустимо, я маю значення 22.06.2009 10:00:00. Як мені отримати лише 10:00 ранку з цього часу.


15
Це рядок чи DateTime?
Колін Бернетт

Відповіді:


202

Для цього у вас є багато варіантів:

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 ()


16
@MetroSmurf - ОП, звичайно, не зрозуміло, що він хоче робити. Одне з моїх домашніх улюбленців - рано йти до струн. У мене був колега, який перетворив все на рядок - навіть парні тощо. Це несподіванка, яка чекає того, що трапиться. Я б сказав, не перетворюйте об'єкти в рядки, поки ви не захочете відобразити об'єкт людиною. До тих пір дотримуйтесь предметів.
пав

1
Для швидкого ознайомлення - ssце секунди з s
початковим

найкраща відповідь досі
Tk1993

76

З а DateTime, ви можете використовувати .TimeOfDay- але це дає вам , TimeSpanщо представляє час в день (10 годин).


або спеціальні випадки з форматуванням на ToString ("коди формату")
kenny

61

У C # є лише тип DateTime, який складається з частини дати та часу. Якщо вас не хвилює частина дати DateTime, встановіть її за замовчуванням, наприклад, таким:

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

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


19
Це має бути прийнятою відповіддю. Питання полягало в тому, щоб витягнути час з DateTime, а не форматувати його як рядок.
ASalazar

Зокрема, це "в .NET", а не "в C #".
rory.ap

22

Ви можете вивчити метод DateTime.ToShortTimeString () .

Також існує багато інших методів та властивостей об’єкта DateTime, які можуть допомогти вам у формуванні дати чи часу будь-яким способом, який вам подобається. Просто погляньте на документацію.


+1 Це найчистіше рішення, якщо ви працюєте в міжнародному середовищі з вимогою локалізації вихідного часу, оскільки він повертає час у будь-якому форматі, в якому встановлена ​​поточна система.
aggaton


6

Існують різні способи зробити це. Ви можете використовувати, DateTime.Now.ToLongTimeString()який повертає лише час у форматі рядка.


Ви, мабуть, мали на увазі, DateTime.ToLongTimeString()а не DateTime.Now.ToLongTimeString(). Зважаючи на вік цієї нитки, краще не відроджувати її, якщо відповідь не сприятиме значному поліпшенню порівняно з попередніми відповідями.
Лі

5

Можна просто написати

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

4
це абсолютно нічого не додає до того, що вже було подано понад 4 роки тому!
пав

5

Ви можете використовувати це

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

Це в режимі реального часу зі значенням мілісекунд, і він встановлює лише час.


TimeOfDay - це хороший спосіб, але він приносить частину мілісекунд, і вам потрібно відформатувати свій час зі стандартним типом.
саджадре

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")ненадовго.


2

якщо ви використовуєте 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 time = DateTime.Parse("6/22/2009 10:00AM");
DateTime compare = DateTime.Parse(time.ToShortDateString() + " 2:00PM");
bool greater = (time > compare);

Можливо, існують і кращі способи цього, але всі дати відповідають вашим датам.


1

Вам також потрібно обліковувати DateTime Kind.

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

Немає сенсу відповідати на це питання, його задали 9 років тому. Також є багато хороших відповідей на це питання.
benshabatnoam

Ви не повертаєте час. Ви повинні переглянути свою відповідь
Yepeekai

@Yepeekai У .NET немає часового класу. Отже, екземпляр DateTime, який не має дати, є одним із варіантів, які можна зробити. Ви також можете повернути рядок, але ви можете використовувати це в операціях DateTime. Я думаю, ви можете розглянути і TimeSpan.
користувач3720899

imo "новий DateTime (d.TimeOfDay.Ticks)" - це найчистіша відповідь на даний момент
Fabianus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.