如何仅从日期时间C#中获取时间


Answers:


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-当然,操作员还不清楚他想做什么。我的宠物讨厌之一是提早演奏弦乐。我有一个同事,他将所有内容都转换为字符串-甚至双打,等等。这是等待发生的事故。我会说不要将对象转换为字符串,除非您想将对象显示给人类。在此之前,请紧贴对象。
paul 2014年

1
为了快速参考,ss秒数前导零,s秒数前无
Beevee

到目前为止最好的答案
Tk1993

76

在中DateTime,您可以使用.TimeOfDay-,但是可以为您提供TimeSpan一天中的时间(10小时)。


或在ToString上格式化的特殊情况(“格式代码”)
肯尼(Jenny

61

C#中只有DateTime类型,它由日期和时间部分组成。如果您不关心DateTime的Date部分,请将其设置为默认值,如下所示:

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

这样,即使Microsoft决定将基准日期更改为1/1/0001以外的其他日期,您也可以在所有.NET版本之间保持一致。


19
这应该是公认的答案。问题是从DateTime中提取时间,而不是将其格式化为字符串。
ASalazar

具体来说,它是“在.NET中”而不是“在C#中”。
rory.ap

22

您可能需要查看DateTime.ToShortTimeString()方法。

此外,DateTime对象上还有许多其他方法和属性,可以帮助您以自己喜欢的任何方式格式化日期或时间。只需看一下文档即可。


+1如果您在要求本地化时间输出的国际环境中运行,这是最干净的解决方案,因为它以当前系统设置的任何格式返回时间。
aggaton


6

有不同的方法可以这样做。您可以使用DateTime.Now.ToLongTimeString()which以字符串格式仅返回时间。


您可能DateTime.ToLongTimeString()不是意思DateTime.Now.ToLongTimeString()。给定该线程的使用期限,除非响应对以前的答案有重大改进,否则最好不要重新启用它。
Leigh 2012年

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")短时间。


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中没有Time类。因此,没有Date部分的DateTime实例是您可以执行的选项之一。您也可以返回一个字符串,但是可以在DateTime操作中使用它。我想您也可以考虑TimeSpan。
user3720899

到目前为止,“最新的DateTime(d.TimeOfDay.Ticks)”是最干净的答案
Fabianus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.