如何从日期时间 C# 中仅获取时间 [关闭]

Posted

技术标签:

【中文标题】如何从日期时间 C# 中仅获取时间 [关闭]【英文标题】:How to get only time from date-time C# [closed] 【发布时间】:2010-11-04 20:08:17 【问题描述】:

假设我的值是 6/22/2009 10:00:00 AM。我如何从这个日期时间只得到上午 10:00。

【问题讨论】:

这是字符串还是日期时间? 字符串时间 = dt.ToString("HH:mm:ss:tt"); 字符串 t1 = dt.ToString("H:mm"); 【参考方案1】:

你有很多选择:

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

【讨论】:

@MetroSmurf - 当然,OP 不清楚他想做什么。我最讨厌的事情之一就是早早去弦乐。我有一位同事将所有内容都转换为字符串 - 甚至是双打等。这是一场等待发生的事故。我会说在您想将对象显示给人类之前不要将对象转换为字符串。在此之前坚持使用对象。 为了快速参考,ss 是带前导零的秒,s 是不带前导的秒 迄今为止最好的答案【参考方案2】:

DateTime,您可以使用.TimeOfDay - 但这会给您一个TimeSpan,代表一天中的时间(10 小时)。

【讨论】:

或在 ToString("format codes") 上格式化的特殊情况【参考方案3】:

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

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

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

【讨论】:

这应该是公认的答案。问题是从 DateTime 中提取时间,而不是将其格式化为字符串。 具体来说,它是“在 .NET 中”而不是“在 C# 中”。 我用DateTime.Now.Date.Add(myDateTime.TimeOfDay)得到了今天的指定时间。【参考方案4】:

您可能想研究DateTime.ToShortTimeString() 方法。

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

【讨论】:

+1 如果您在需要时间输出本地化的国际环境中运行,这是最简洁的解决方案,因为它以当前系统设置的任何格式返回时间。 【参考方案5】:

试试这个:

TimeSpan TodayTime = DateTime.Now.TimeOfDay;

【讨论】:

【参考方案6】:

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

【讨论】:

您可能指的是DateTime.ToLongTimeString(),而不是DateTime.Now.ToLongTimeString()。鉴于此线程的年龄,最好不要恢复它,除非响应对以前的答案有显着改进。【参考方案7】:
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

【讨论】:

【参考方案8】:

你可以简单地写

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

【讨论】:

这对 4 年前已经提交的内容完全没有任何影响!【参考方案9】:

你可以用这个

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

它是实时的,毫秒值,它只设置为时间。

【讨论】:

TimeOfDay 是一个好方法,但它也带来了毫秒部分,您需要使用标准类型格式化您的时间。【参考方案10】:

这对我有用。当我不得不使用 DateTime.Date 来获取日期部分时,我发现了它。

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

【讨论】:

【参考方案11】:

您可以长期使用ToString("T"),也可以短期使用ToString("t")

【讨论】:

【参考方案12】:

如果您要比较时间而不是日期,您可以只使用标准比较日期,或者与您使用的日期相匹配,如...

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

可能有更好的方法可以做到这一点,但要保持日期匹配。

【讨论】:

【参考方案13】:

如果您使用的是 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"/>

【讨论】:

【参考方案14】:

您还需要考虑 DateTime Kind。

public static DateTime GetTime(this DateTime d)

    return new DateTime(d.TimeOfDay.Ticks, d.Kind);

【讨论】:

这个问题没必要回答,9年前就问过了。这个问题已经有很多很好的答案了。 您没有返回时间。你应该检查你的答案 @Yepeekai .NET 中没有 Time 类。因此,没有 Date 部分的 DateTime 实例是您可以执行的选项之一。您也可以返回一个字符串,但您可以在 DateTime 操作中使用它。我想您也可以考虑使用 TimeSpan。 imo "new DateTime(d.TimeOfDay.Ticks)" 是迄今为止最干净的答案

以上是关于如何从日期时间 C# 中仅获取时间 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何从日期时间对象中仅提取月份和日期?

如何在 laravel 5.4 中仅获取 created_at 日期而不是时间

如何在 servlet 中仅检索年份,同时从数据库中获取结果集

C# 需要将 sql 中的数据放入 DataGridView 并在行中按日期排序

如何在时间戳字段中仅使用日期来选择记录?

Nullable-如何在 C# 中的 DateTime 类型中仅比较没有时间的日期?