首页 > 解决方案 > 使用 C# 计算 MVC 模型中的时间跨度

问题描述

我的 MVC 项目中有一个存储活动的模型。我需要显示开始时间和结束时间之间的差异。这是我的模型类:

[Table("DailyCrewActivity")]
public partial class DailyCrewActivity
{
    [Key]
    public int id { get; set; }

    [Display(Name = "Crew Name")]
    [ForeignKey("DailyCrew")]
    public int daily_crew_id { get; set; }

    [Display(Name = "Task Number")]
    [ForeignKey("ContractTask")]
    public int contract_task_id { get; set; }

    [Display(Name = "Activity Date")]
    [DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
    public DateTime activity_date { get; set; }

    [Required]
    [StringLength(50)]
    [Display(Name = "Activity Code")]
    public string activity_code { get; set; }

    [Display(Name = "Start Time")]
    [DisplayFormat(DataFormatString = "{0:hh:mm}")]
    public string activity_start { get; set; }

    [Display(Name = "End Time")]
    [DisplayFormat(DataFormatString = "{0:hh:mm}")]
    public string activity_end { get; set; }

    [NotMapped]
    [Display(Name = "Hours")]
    [DisplayFormat(DataFormatString = "{0:#.##}")]
    public decimal ElapsedTime
    {
        get
        {
            decimal duration = 0;
            if (String.IsNullOrEmpty(activity_start) && String.IsNullOrEmpty(activity_end))
            {

                TimeSpan spanStart;
                TimeSpan spanEnd;
                if (TimeSpan.TryParse(activity_start, out spanStart) && TimeSpan.TryParse(activity_end, out spanEnd))
                {
                    duration = Convert.ToDecimal(spanEnd - spanStart);
                }

            }
            return duration;
        }
    }

    public DailyCrew DailyCrew { get; set; }
    public ContractTask ContractTask { get; set; }

}

我没有得到返回到 ElapsedTime 的计算。是因为我将时间存储在一个字符串中,然后将其解析为 TimeSpan 吗?我不确定发生了什么。

谢谢

瑞安

标签: c#entity-frameworkasp.net-mvc-4

解决方案


您正在检查两个值是否为空,这不会给您任何东西。您需要检查两者的非空/空值:

if (!String.IsNullOrEmpty(activity_start) && !String.IsNullOrEmpty(activity_end))
{
    ...
}

推荐阅读