std::time() 及其对夏令时的依赖
std::time() and its dependence on daylight saving
我有一个要求,如果在 15 分钟内连续 3 次登录尝试失败,则锁定用户。如果第三次登录尝试失败,我将使用以下公式进行检查。
if (first_login_attemp_time + 900 <= std::time(nullptr))
{
lockuser();
}
如果第一次登录尝试失败,我设置first_login_attemp_time如下
first_login_attemp_time = std::time(nullptr)
如果在 15 分钟内发生夏令时更改,此代码是否有效?window?
我应该考虑其他的夏令时吗?
std::time
returns UTC 时间不遵循地方当局的夏令时政策。所以关于夏令时不用担心。
正如引用的参考文章所说,大多数系统都按照 POSIX 标准实施 std::time_t
(即 std::time
returns)。根据我的经验,这是我所知道的所有系统。因此它极有可能以秒为单位成为整数值,因此您的 + 900
结果提前 15 分钟。
但是你的代码逻辑很奇怪。它会在自第一次尝试后超过 15 分钟后锁定用户,这通常不是所谓的“15 分钟内”。
我有一个要求,如果在 15 分钟内连续 3 次登录尝试失败,则锁定用户。如果第三次登录尝试失败,我将使用以下公式进行检查。
if (first_login_attemp_time + 900 <= std::time(nullptr))
{
lockuser();
}
如果第一次登录尝试失败,我设置first_login_attemp_time如下
first_login_attemp_time = std::time(nullptr)
如果在 15 分钟内发生夏令时更改,此代码是否有效?window? 我应该考虑其他的夏令时吗?
std::time
returns UTC 时间不遵循地方当局的夏令时政策。所以关于夏令时不用担心。
正如引用的参考文章所说,大多数系统都按照 POSIX 标准实施 std::time_t
(即 std::time
returns)。根据我的经验,这是我所知道的所有系统。因此它极有可能以秒为单位成为整数值,因此您的 + 900
结果提前 15 分钟。
但是你的代码逻辑很奇怪。它会在自第一次尝试后超过 15 分钟后锁定用户,这通常不是所谓的“15 分钟内”。