如何datetime数据类型是不是为空?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何datetime数据类型是不是为空?相关的知识,希望对你有一定的参考价值。

没有初始化的datetime类型的变量好像不是null?
判断语句应该怎么写??

.NET Framework 和 COM 都采用默认日期。然而,COM 系统采用的基准日期是公元 1899 年 12 月 30 日,而 .NET Framework 采用的基准日期是公元 0001 年 1 月 1 日。

datetime是一个结构而不是一个类。他永远不会为空,可以通过其年份判断有没有“初始化”。
参考技术A datetime? d = null;

if(d==null)

.....
参考技术B DateTime.Empty

检查 DateTime 类型的值是不是在视图中为空,如果为空则显示空白

【中文标题】检查 DateTime 类型的值是不是在视图中为空,如果为空则显示空白【英文标题】:Checking if the value of type DateTime is null in view and showing blank if null检查 DateTime 类型的值是否在视图中为空,如果为空则显示空白 【发布时间】:2013-07-29 07:59:43 【问题描述】:

从我的控制器我已经将值模块传递给查看

    public ActionResult Details(long id, string owner)
    
        var module = _ownedModuleRepository.GetModuleDetails(id, owner);

        return View(module);
    

我已经在视图中显示了它包含的值,如下所示

    <dt>ID</dt>
    <dd>@Model.Id</dd>

    <dt>Module ID</dt>
    <dd>@Model.ModuleId</dd>

     <dt>Owner</dt>
    <dd>@Model.Owner</dd>

    <dt>Module Type</dt>
    <dd>@Model.TypeName</dd>

    <dt>Module Kind</dt>
    <dd>@Model.KindName</dd>

    <dt>Ownership Start Date</dt>
    <dd>@Model.Start</dd>

    <dt>Ownership End Date</dt>
    <dd>@Model.End</dd>

    @foreach (var properties in Model.Properties)
    
        <dt>Property Name</dt>
        <dd>@properties.Name</dd>
        <dt>Property Value</dt>
        <dd>@properties.Value</dd>
    

当前 @Model.End 为空,它是 DateTime 类型,我已将它设置为在 viewmodel 中可以为空。 因为它是空的,这就是我所看到的

如您所见,Ownership End Date 的值取自下方的 Property Name 的值。如果 @Model.End 为空,如何将其设置为空

编辑 1:

我的模型

public class OwnedModuleDetails

    public long Id  get; set; 

    public string ModuleId  get; set; 

    public string Owner  get; set; 

    public string KindName  get; set; 
    public string TypeName  get; set; 

    public DateTime Start  get; set; 

    public DateTime? End  get; set; 

    public IEnumerable<Property> Properties  get; set; 

存储库中的方法

     public OwnedModuleDetails GetModuleDetails(long id, string owner)
        
// ReSharper disable ImplicitlyCapturedClosure
            var module = (_dbSis.OwnedModules.Where(t => t.Id == id).Select(m => new OwnedModuleDetails
// ReSharper restore ImplicitlyCapturedClosure
            
                Id = id,
                ModuleId = m.ModuleId,
                TypeName = m.ModuleType.TypeName,
                KindName = m.ModuleType.ModuleKind.KindName,
                Owner = owner,
                Start = m.Start,
                End = m.End,
                Properties = m.PropertyConfiguration.PropertyInstances.Select(
                    x => new Property  Name = x.Property.Name, Value = x.Value )
            ));

            return (module.FirstOrDefault());
        

【问题讨论】:

DateTime? 类型中获取字符串值的方式很奇怪。您确定 End 属性是 DateTime? 吗?这是哪里来的MicrophoneArrayRackModuleId 它设置为日期和时间,我已将我的模型作为编辑,方法控制器也在存储库中调用 这个MicrophoneArrayRackModuleId 来自哪里?您不可能为 DateTime 属性获得这样的输出。 我的模型有IEnumerable&lt;Property&gt; Properties属性类包含Name(字符串)和Value(字符串),MicrophoneRackModuleId是@987654333之一@名称 【参考方案1】:

尝试添加空格:

<dt>Ownership End Date</dt>
<dd>
    @if (Model.End != null)
    
        @Model.End
    
    else
    
        @:&nbsp;
    
</dd>

【讨论】:

对于第一个选项,我在 @:&amp;nbsp;: 中收到第二个选项的错误 There is no implicit conversion between 'string' and 'system.web.Ihtmlstring',它显示 @ must be followed by valid code block。我尝试删除 @: 但在浏览器中它显示 Ownership End Dateif (Model.End != null) else if 语句应以@ 为前缀。 是的,我忘了。谢谢,它奏效了。因此,如果您有一个空值,那么下一项的值会出现在上一项?就像我的情况一样。 不,这是您的 &lt;dt&gt;&lt;dd&gt; 标签的 CSS 问题。如果它显然是空的,浏览器会显示下一个。您应该尝试修复您的 CSS 文件。【参考方案2】:

当用户在日期列中插入空值时,我曾经遇到过这个问题。

导致此错误的原因:

System.InvalidOperationException: Nullable object must have a value

要解决这个问题,而不是 DisplayFor,只需在您的视图中使用以下代码,因此如果列值为 null,它将显示 Date is Empty

 <td>
            
@(item.Startdate.HasValue ? item.Startdate.Value.ToString("dd/MM/yyyy") : "Date is Empty")

</td>

进一步阅读 this 和 this 模型

希望能帮助别人。

【讨论】:

【参考方案3】:

您可以使用 C# 空合并运算符:

@(Model.End?.ToString("dd/MM/yyyy") ?? "Date is Empty")

【讨论】:

【参考方案4】:

这里不会进行三元运算:

@(Model.End != null ? Model.End.ToString() : "")

【讨论】:

以上是关于如何datetime数据类型是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章

检查 DateTime 类型的值是不是在视图中为空,如果为空则显示空白

如何给一个decimal数据类型的变量赋个空值?

如何判断 pandas 数据框中的列是不是为 datetime 类型?如何判断一列是不是为数字?

mysql那些事时间类型数据如何存储

从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值

如何判断SQL SERVER表中字段为空