【发布时间】:2020-02-07 17:48:33
【问题描述】:
我正在尝试查看自创建令牌对象以来是否已经过去了一个小时。 我在创建它时使用 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; }
我的验证方法
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;
}
【问题讨论】:
-
为什么要与 utcnow + 1hour 进行比较?您真的不想知道
machineDate - tokenDate是否大于1 小时吗?喜欢if ((machineDate - tokenDate).TotalHours > 1)? -
问题是您在比较日期时将机器日期加一小时。过去或当前的任何日期都将返回 var result = DateTime.Compare(tokenDate, machineDate.AddHours(-1));。
-
为我辩护...这里是星期五...所以我怀疑我的大脑准备好迎接周末...