【问题标题】:C# times matchingC# 时间匹配
【发布时间】:2011-12-20 09:12:07
【问题描述】:

我用 C# 编写了一个小函数,这不是我的主要语言,所以对我来说有点陌生。

public bool CheckForKey(string key)
{
    string strKeyTime = Decode(key);
    //valid key will be current time +- 5 minutes
    string strTheTime = DateTime.Now.ToString("HH:mm:ss tt");

    if (strKeyTime == strTheTime)
    {
        return true;
    }
    else
    {
        return false;
    }
}

我需要更改它以允许 5 分钟,所以 如果(strKeyTime == strTheTime) 需要是 if (strKeyTime == strTheTime + or - 5 分钟)

我的问题是匹配时间,因为它们是字符串,也许先将键(原始时间)转换回日期然后再做,但我对 c# 很陌生

【问题讨论】:

  • return strKeyTime == strTheTime;

标签: c# date time string-matching


【解决方案1】:

如果您将它们都转换(或保留)为 DateTimes,您可以使用 TimeSpan:

TimeSpan delta = dateTime1 - dateTime2;
if (Math.Abs(delta.TotalMinutes) <= 5) { ... }

考虑使用DateTime.ParseExact(或任何 Parse... 方法)来解析您的 strKeyTime,然后执行与上述类似的操作。

【讨论】:

    【解决方案2】:

    要将您发送的字符串转换为等效的 DateTime 值,请使用以下代码:

    var keyDateTime = Convert.ToDateTime(strKeyTime);
    var strTheTime = DateTime.Now
    

    从这里,您可以使用此值与您的原始时间值进行比较,如下所示:

    if (keyDateTime == strTheTime || (keyDateTime > strTheTime && keyDateTime < strTheTime.AddMinutes(5))
    {
        return true;
    }
    

    前面的代码块将首先检查我们是否得到完全匹配,或者发送到方法的时间在原始时间和额外 5 分钟的时间偏移之间。

    就是这样,如果这不是您需要的,请告诉我,以便我为您更新答案,谢谢。

    --如果我的答案是正确的,别忘了“标记为答案”。

    【讨论】:

      【解决方案3】:

      “也许先将密钥(原始时间)转换回日期,然后再执行”听起来像是一个合理的解决方案。我会这样做:

      如果没有有关您的字符串格式的信息,我无法真正给您任何建议。但是,一旦完成,剩下的就很容易了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        • 2021-02-26
        • 2021-03-31
        • 2018-08-12
        • 2021-11-06
        相关资源
        最近更新 更多