Embarcadero的EncodeDateTime文档是否有误?调用触发异常求助
为什么调用
EncodeDateTime(2008,1,1,24,0,0,0)会触发异常? 这其实是Embarcadero文档表述和函数实际实现之间的一个容易误导人的小差异。
虽然文档说明小时值范围是0至24,且当小时为24时分、秒、毫秒需均为0时,生成的是次日午夜的TDateTime,但实际在大多数Delphi/Embarcadero RAD Studio版本中,EncodeDateTime的小时参数并不直接接受24这个值——哪怕你满足分秒毫秒全为0的条件,函数内部的参数校验还是会判定24是无效值,从而抛出异常。
如果想要生成2008年1月1日结束、1月2日开始的午夜时间,正确的做法有两种:
- 直接编码次日的午夜时间:
EncodeDateTime(2008, 1, 2, 0, 0, 0, 0) - 用日期偏移函数生成:
IncDay(EncodeDateTime(2008, 1, 1, 0, 0, 0, 0), 1)
简单来说,文档里的“小时值范围0至24”更像是一种逻辑上的边界表述,但函数的实际参数校验并没有把24纳入合法输入范围,这就是你触发异常的核心原因。
内容的提问来源于stack exchange,提问作者zeus
相关产品推荐
相关产品推荐

