比较日期时间,看看是否已经过去一小时

and*_*e91 3 c# datetime compare

我想看看自创建令牌对象以来是否已经过去了一小时。我在创建它时使用 datetime.utcnow 。

我尝试过 datetime.compare,并直接比较两个日期时间,但无论我做什么,它都会得到相同的结果..(不是我想要的)

如果自创建以来已经过了一小时,则令牌应该被“消耗”,因此它不再有效。

令牌对象

    public int ID { get; set; }

    public int UserId { get; set; }

    public string Token { get; set; }

    public System.DateTime Time_stamp { get; set; }

    public Nullable<bool> Consumed { get; set; }
Run Code Online (Sandbox Code Playgroud)

我的验证方法

public bool IsValidToken(string token)
{
        var tokenEntity = this.GetAll().Where(x => x.Consumed == false && x.Token == token).FirstOrDefault();

            if (tokenEntity != null)
            {
                var tokenDate = tokenEntity.Time_stamp;

                var machineDate = DateTime.UtcNow;


                var result = DateTime.Compare(tokenDate, machineDate.AddHours(1));

                if (result > 0)
                {
                    tokenEntity.Consumed = true;
                    this.Update(tokenEntity);
                    return false;
                }
                else
                {
                    return true;
                }
            }
            return false;
        }
Run Code Online (Sandbox Code Playgroud)

Pra*_*kar 9

相反,DateTime.Compare()您可以减去两个DateTime并得到结果的总小时数DateTime

就像是,

var result = (DateTime.UtcNow - tokenEntity.Time_stamp).TotalHours;
if(result > 1)
{
   //Do your business logic for expiring token
}
else
   //Your business logic
Run Code Online (Sandbox Code Playgroud)

在线尝试一下

  • 另外,如果您只想知道两个“DateTime”值是否相隔“1”小时,但不关心哪个小于另一个,则可以使用“Duration()”方法获取绝对值的差异。否则,差值可能是负数(在不应该的情况下,这将导致“结果 &gt; 1”测试失败)。例如:`(DateTime.UtcNow - tokenEntity.Time_stamp).Duration().TotalHours;` (2认同)