代码之家  ›  专栏  ›  技术社区  ›  Slauma

如果且仅当时间部分=00:00:00时,如何在显示中抑制.NET日期时间的时间部分?

  •  3
  • Slauma  · 技术社区  · 14 年前

    在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
    

    这有可能吗?我该怎么做?

    谢谢你事先的提示!

    6 回复  |  直到 14 年前
        1
  •  6
  •   Jeff Sternal    14 年前

    我会把这个放在我的代码后面:

    // 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")) %>' />
    

    如果你在多个地方这样做,考虑写 an extension method 对于 DateTime 然后把这个逻辑放在那里(可能有额外的参数来提供不同的格式,等等)。

        2
  •  1
  •   Heinzi    14 年前

    你没有提到你使用哪种.NET语言。使用vb.net,可以使用以下内联表达式:

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

    我没有用c来测试,但我想替换 If(...) 三元的 ?: 运算符并将结果转换为 Eval 到A DateTime 访问之前 TimeOfDay 应该会成功的。

        3
  •  1
  •   nickytonline    14 年前

    没有测试,但在我的头顶上:

    标记中

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

    在代码隐藏中:

    protected string FormatMyDateTime(DateTime date)
    {
          // Do your if else for formatting here.
    }
    
        4
  •  0
  •   pdavis    14 年前

    您可以替换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));
    %>
    
        5
  •  0
  •   Pang abielita    10 年前

    仅显示日期部分

    <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()%>' />
    
        6
  •  0
  •   Pang abielita    10 年前

    我不确定你是否在找这个,但我觉得值得一试。 希望能成功。

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