当且仅当时间部分 = 00:00:00 时,如何抑制显示 .NET DateTime 的时间部分?

发布于 2024-08-22 08:45:03 字数 452 浏览 7 评论 0原文

在 ASP.NET 页面中,我有这样的内容:

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# Eval("MyDateTime") %>' />

我希望将其格式化为

... Eval("MyDateTime", "{0:d}") ... // Display only the date

当且仅当 MyDateTime 的时间部分为 00:00:00 时。否则就像这样:

... Eval("MyDateTime", "{0:g}") ... // Display date and time in hh:mm format

这可能吗?我该怎么做?

感谢您提前的提示!

In an ASP.NET page I have this:

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# Eval("MyDateTime") %>' />

I'd like to have it formatted like

... Eval("MyDateTime", "{0:d}") ... // Display only the date

if and only if the time part of MyDateTime is 00:00:00. Otherwise like this:

... Eval("MyDateTime", "{0:g}") ... // Display date and time in hh:mm format

Is this possible and how can I do that?

Thank you for hints in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

萌吟 2024-08-29 08:45:03

我会将其放入我的代码隐藏中:

// This could use a better name!
protected string FormatDateHideMidnight(DateTime dateTime) {
    if (dateTime.TimeOfDay == TimeSpan.Zero) {
        return dateTime.ToString("d");
    } else {
        return dateTime.ToString("g");
    }
}

并将 .aspx 更改为这样调用:

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# FormatDateHideMidnight((DateTime)Eval("MyDateTime")) %>' />

如果您在多个地方执行此操作,请考虑编写 DateTime 的扩展方法 并将此逻辑放在那里(可能带有附加参数来提供不同的格式等)。

I'd put this in my code-behind:

// This could use a better name!
protected string FormatDateHideMidnight(DateTime dateTime) {
    if (dateTime.TimeOfDay == TimeSpan.Zero) {
        return dateTime.ToString("d");
    } else {
        return dateTime.ToString("g");
    }
}

And change the .aspx to call that:

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# FormatDateHideMidnight((DateTime)Eval("MyDateTime")) %>' />

If you do this in multiple places, consider writing an extension method for DateTime and put this logic there (perhaps with additional parameters to supply different formats, etc.).

不喜欢何必死缠烂打 2024-08-29 08:45:03

您没有提及您使用哪种.net 语言。使用 VB.NET,您可以使用以下内联表达式:

... Text='<%# Eval("MyDateTime", If(Eval("MyDateTime").TimeOfDay = TimeSpan.Zero, "{0:d}", "{0:g}")) %>'

我没有使用 C# 进行测试,但我猜用三元 ?: 运算符替换 If(...)在访问 TimeOfDay 之前将 Eval 的结果转换为 DateTime 应该可以解决问题。

You did not mention which .net language you use. With VB.NET, you can use the following inline expression:

... Text='<%# Eval("MyDateTime", If(Eval("MyDateTime").TimeOfDay = TimeSpan.Zero, "{0:d}", "{0:g}")) %>'

I did not test with C#, but I guess replacing If(...) with the ternary ?: operator and casting the result of Eval to a DateTime before accessing TimeOfDay should do the trick.

甜是你 2024-08-29 08:45:03

没有测试,但在我的脑海中:

标记中:

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# FormatMyDateTime((DateTime)Eval("MyDateTime")) %>' />

在代码隐藏的

protected string FormatMyDateTime(DateTime date)
{
      // Do your if else for formatting here.
}

didn't test, but off the top of my head:

in markup

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# FormatMyDateTime((DateTime)Eval("MyDateTime")) %>' />

in code-behind:

protected string FormatMyDateTime(DateTime date)
{
      // Do your if else for formatting here.
}
柠北森屋 2024-08-29 08:45:03

您可以在 aspx 文件中替换以下代码,或者创建一个方法并调用该方法以返回值。

<%
   DateTime dtTime = DateTime.Now;

    if (dtTime.TimeOfDay == TimeSpan.Zero)
        Response.Write(String.Format("{0:d}", dtTime));
    else
        Response.Write(String.Format("{0:g}", dtTime));
%>

You can substitute the following code in the aspx file or create a method and call the method to return the value.

<%
   DateTime dtTime = DateTime.Now;

    if (dtTime.TimeOfDay == TimeSpan.Zero)
        Response.Write(String.Format("{0:d}", dtTime));
    else
        Response.Write(String.Format("{0:g}", dtTime));
%>
前事休说 2024-08-29 08:45:03

仅显示日期部分

<asp:Label id="lblExamDate" runat="server" Text='<%#Convert.ToDateTime(Eval("theExamDate.Date")).ToShortDateString()%>'></asp:Label>

和仅显示时间部分

<asp:Label ID="lblStartTime" runat="server" Text='<%#Convert.ToDateTime(Eval("ExamStartTime")).ToShortTimeString()%>' />

To show only date part

<asp:Label id="lblExamDate" runat="server" Text='<%#Convert.ToDateTime(Eval("theExamDate.Date")).ToShortDateString()%>'></asp:Label>

and to show only time part

<asp:Label ID="lblStartTime" runat="server" Text='<%#Convert.ToDateTime(Eval("ExamStartTime")).ToShortTimeString()%>' />
马蹄踏│碎落叶 2024-08-29 08:45:03

我不确定您是否正在寻找这个,但我觉得值得尝试。
希望它有效。

<%# String.Format(Eval("MyDateTime"),"{0:d}") %>

<%# String.Format(Eval("MyDateTime"),"{0:g}") %>

I am not sure if you are looking for this, but I feel it's worth trying.
Hope it works.

<%# String.Format(Eval("MyDateTime"),"{0:d}") %>

<%# String.Format(Eval("MyDateTime"),"{0:g}") %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文