我正在为Pebble平台开发一个项目。应用程序是用C语言编写的,我的问题并不是针对该平台的。
Pebble API有一个名为PblTm的结构,每秒都会被一行代码填充。我的目标是将结构与当前时间进行比较。我创建了PblTm结构并用我需要比较的时间填充它们。我只关心结构的小时和分钟部分。到目前为止,我有以下代码。
bool comp_time(int h1, int m1, int h2, int m2, int h3, int m3) {
if((h1<=h2) && (h2<=h3)) //Is start hour <= now hour <= end hour?
{
if((h1=h2) && (m2>=m1)) //If start hour = now hour, is now min >= start min ?
{
return true;
}
if((h2=h3) && (m2<=m3)) //If end hour = now hour, if now min <= end min?
{
return true;
}
if((h1>h2) && (h2<h3)) //If start hour < now hour < end hour?
{
return true;
}
}
else
{
return false;
}
return false;
}
我最初尝试将结构本身作为参数提供给函数,如:
comp_time(&first_start,&now,&first_end);
然后引用函数内部结构的元素,我永远无法编译,我无法找到它的信息。 (我可能没有一直在寻找正确的术语)。
然后我改为将int参数提供给函数本身,如下所示:
comp_time(first_start.tm_hour,first_start.tm_min,now.tm_hour,now.tm_min,first_end.tm_hour,first_end.tm_min)
这是一种非常笨拙的方式,但我已经完成了所有工作。然而,我的主要问题是比较功能不起作用。它返回(显然是随机的,我无法找到一个模式)对于不适合的值,对于某些适合的值,则返回false。
你有什么想法吗?
答案 0 :(得分:2)
你应该真正更新到Pebble SDK2,它提供time_t
时间值。此值是时间戳(number of seconds since epoch),您可以在一次操作中轻松比较它。
答案 1 :(得分:1)
好的,所以你的参数名称使得阅读代码和理由非常困难,所以让我们重写一下:
bool comp_time(int hstart, int mstart, int hnow, int mnow, int hend, int mend) {
if (( hstart <= hnow ) && ( hnow <= hend ))
{
到目前为止一切顺利。我们知道如果hnow
小于hstart
或大于hend
,那么它就不是真的。
if((hstart==hnow) && (mnow>=mstart)) return true ; // BAD
除了==
而不是=
的修正,这仍然是错误的。你只测试边界的一边。您需要针对start
和end
进行测试,以确保您在范围内:
if ( ( (hstart < hnow ) || (mstart <= mnow ) ) &&
( (hnow < hend) || (mnow <= mend ) ) ) { return true ; }