日期时间比较接近满小时

14次浏览(过去30天)
亚瑟Romeu
亚瑟Romeu 2020年3月9日
评论道: 亚瑟Romeu2020年3月11日
你好,
我有这段代码,比较两组日期时间:
c = 1
k = 1:尺寸(TR_SoftStart, 1)
年份= abs(年份(PC_SoftStart) -年份(TR_SoftStart.Data(k))) < 1;
月= abs(月(PC_SoftStart) -月(TR_SoftStart.Data(k))) < 1;
天= abs(天(PC_SoftStart) -天(TR_SoftStart.Data(k))) < 1;
小时= abs(小时(PC_SoftStart) -小时(TR_SoftStart.Data(k))) < 1;
分钟= abs(分钟(PC_SoftStart) -分钟(TR_SoftStart.Data(k))) <= 1;
测试=年&月&日&小时&分钟;
如果任何(测试,“所有”
disp (k)
其他的
errors_SoftStart (c:) = TR_SoftStart (k,:);
C = C + 1;
结束
结束
它基本上检查TR_SoftStart上的日期时间是否在PC_SoftStart上具有±1分钟的公差对。但是,有一种情况下脚本无法工作。当它接近整点的时候(例如:15:59:00和16:00:00),它不知道它们之间实际上只有1分钟。我知道这是因为数学只分析单个参数(年,月,等等)。我真的很难想出一个解决办法。什么好主意吗?
提前谢谢,
亚瑟。
1评论
里克
里克 2020年3月9日
(从垃圾邮件过滤器移除)

登录并发表评论。

接受的答案

汉克
汉克 2020年3月9日
编辑:汉克 2020年3月9日
不要为自己分割时间而烦恼。
t1 = datetime (“9 - 3月- 2020 16:00:00”);
t0 = datetime (“9 - 3月- 2020 15:59:03”);
dt = t1-t0
dt =
持续时间
00:00:57
这里有两个日期时间,间隔1分钟。减去它们将返回一个持续时间数据类型。
将容忍值设置为另一个持续时间对象
托尔=持续时间(0,1,0);% 1分钟持续时间
dt <托尔;%真实
2的评论
亚瑟Romeu
亚瑟Romeu 2020年3月11日
谢谢你们! !帮助100%。今天学了点新东西:)

登录并发表评论。

更多的答案(2)

dpb
dpb 2020年3月10日
是个坏= ~ cell2mat (arrayfun (@ (t)任何(abs (PC_SoftStart-t) < =分钟(1)& ~ isnat (PC_SoftStart),“所有”), TR_SoftStart。数据,“UniformOutput”, 0));
TSS_Missing = TR_SoftStart(是个坏:);
结果
: > > TSS_Missing (1:5)
ans =
5×2表
状态数据
_____________________________________
“Aumento_Gradual”截止2019年6月27日06:17:00
“Aumento_Gradual”截止2019年6月28日00:24:00
“Aumento_Gradual”截止2019年6月28日22:22:00
“Aumento_Gradual”截止2019年6月29日16:52:00
“Aumento_Gradual”30 - 2019年6月——13:25:00
>>
检查结果…
> >电脑=排序(PC_SoftStart (~ isnat (PC_SoftStart)));
电脑(1:10)
ans =
10×1 datetime数组
27.小君。2019 00:00:00
27.小君。2019 05:35:00
27.小君。2019 05:56:00
27.小君。2019 15:14:00
27.小君。2019 15:35:00
27.小君。2019 23:50:00
28.小君。2019 00:00:00
28.小君。2019 00:11:00
28.小君。2019 21:16:00
28.小君。2019 21:18:00
>>
包含缺失表中的前两个的间隔没有匹配…

史蒂文的主
史蒂文的主 2020年3月10日
我不确定,但从您描述的将基于时间的数据存储为 时间表 和使用 withtol 索引以从其中提取适当的行 时间表 可能对你有用。请参阅“带公差的指定时间索引”章节 这个文档页面 对于一个看起来有点类似于您的用例的示例。
1评论
dpb
dpb 2020年3月10日
啊!我遇到 withtol 但忘了,史蒂文!
> > isOK = withtol (TR_SoftStart.Data分钟(1));
错误使用withtol(第78行)
宽容超过下标时间之间最小间隔的一半,可能
结果在选择重复行时。误差必须小于1分钟。
> > min (diff(排序(TR_SoftStart.Data)))
ans =
持续时间
00:02:00
>>
还需要 秒(59.999) 然而。
我并没有试图改造以上的利用;看起来必须重定向到一个时间表来使用结果选择对象,因为它似乎不只是一个索引表达式到 datetime 数组中。

登录并发表评论。

下载188bet金宝搏

社区寻宝

在MATLAB中央找到宝藏,发现社区如何可以帮助你!

开始狩猎!