如果不是时间的日期时间格式删除时间为零(00:00:00)

时间:2017-05-23 19:13:41

标签: c# asp.net sql-server datetime format

我有一个页面可以在用户选择时显示不同表格的内容。 这些表格包含DateTime字段类型,但时间并不总是相关的,特别是当时间为00:00:00

这意味着,有时候要显示的表可能有一个BirthDate列,其中时间不相关,其他可能有CreatedOn,其中需要在视图中显示时间。

我无法专门为特定列设置格式,因为视图可以显示任何表,但是在后面的代码(C#)中,我能够识别列是否为DateTime类型并在displayng之前设置格式。 / p>

使用条件:

DataTable dt0 = dsDataSet.Tables[0].Copy();
foreach (DataColumn column in dt0.Columns)
{
    if (column.DataType == typeof(System.DateTime))
    {
            var printDateFormat = dtfi.ShortDatePattern;
            :..
            :..
    }
}

对于所有DateTime列,结果将为dd-MM-yyyy,并且即使对于需要显示时间的列,也将删除列的时间。

理想的解决方案应该显示如下数据:

in DB -> DateTime  |In Page View| in DB -> DateTime |In Page View       |
===================|============|===================|===================|
BirthDate          |            |Created On         |                   |
===================|============|===================|===================|
07/03/2014 00:00:00|07/03/2014  |05/03/2015 03:04:01|05/03/2015 03:04:01|
12/01/2014 00:00:00|12/01/2014  |03/01/2015 06:05:01|03/01/2015 06:05:01|

提前谢谢。

3 个答案:

答案 0 :(得分:2)

我不确定这是多么有效,但这会消除您需要完成的时间:

  • 首先将日期转换为DATE类型,然后将其重新命名为DATETIME

    CAST(CAST(GETDATE() AS Date) AS Datetime)
    

但是,如果您只是在C#中格式化它,只需在DateTime字段上调用ToShortDateString()。

<强>更新

因此,您只需要显示非零时间的时间。在这种情况下,您可以:

  • 测试小时,分钟和秒,以查看它们是否均为0。

    var date = DateTime.Now; 
    var printDate = (date.Hour == 0 && date.Minute == 0 && date.Second == 0) 
        ? date.ToShortDateString() : date.ToShortDateTimeString(); 
    

更新2

另一件事是获取一天中的时间,然后是总秒数。午夜时分为零。

    var printDate2 = (date.TimeOfDay.TotalSeconds == 0) 
        ? date.ToShortDateString() : date.ToShortDateTimeString();

答案 1 :(得分:0)

您可以创建一个新的DataTable,将DateTime列替换为字符串列,指定所需的格式。

df <- data.frame(region, date=paste(month, year, sep="-"), sales, inc_sales)
df

highchart() %>% 
hc_chart(type = "column") %>% 
hc_title(text = "Some Title") %>%
hc_add_series(name="Sales",data = df$sales  ) %>% 
hc_add_series(name="Inc Sales", data = df$inc_sales) %>%
hc_xAxis(categories = list(
list(
  name =  "Bavaria",
  categories = list("11-2016","12-2016","1-2017","2-2017") 
      ),
list(
  name =  "Berlin",
  categories = list("11-2016","12-2016","1-2017","2-2017") 

)
) )%>%

hc_plotOptions(column = list(stacking = "percent"))

答案 2 :(得分:0)

一种解决方案是向DateTime类添加一个自定义扩展方法,该方法返回您的自定义字符串格式(这可能会节省大量重复代码,并在以后提供单个位置来更改格式):

public static class Extensions
{
    public static string GetCustomFormatString(this DateTime input, 
        bool excludeTimeIfZero = true)
    {
        return input.TimeOfDay == TimeSpan.Zero && excludeTimeIfZero
            ? input.ToString("MM/dd/yyyy")
            : input.ToString("MM/dd/yyyy hh:mm:ss");
    }
}

使用示例

private static void Main()
{
    // DateTime.Now includes a non-zero time (except at midnight)
    Console.WriteLine(DateTime.Now.GetCustomFormatString());

    // A new DateTime has a zero time value
    Console.WriteLine(new DateTime().GetCustomFormatString());

    Console.WriteLine("\nDone!\nPress any key to exit...");
    Console.ReadKey();
}

<强>输出

enter image description here