我们正在考虑使用PostgreSQL,因为它遵守ISO 8601 3.5.2,特别是关于独立(未组合)时间数据类型(例如18:50),与组合的DateTime(时间戳)类型不同。请参阅relevant PostgreSQL 9.2. docs。 Time of Day数据类型基于24小时制,与日历无关,运行时间为00:00至24:00。
我们有Windows桌面,正在考虑使用.NET的npgsql提供程序。但我被<{3>}抛出 npgsqlTime 类型; Hours 实例属性的内容如下:
获取实例中保留的整个小时数。请注意 时间24:00:00可以存储以实现往返兼容性。 任何 对这样的值进行计算会将[sic]标准化为00:00:00 。 [我的重点]
“这样的值”是指“24:00:00”。我是否正确理解了这个文档,如果要创建两个 npgsqlTime 实例,如下所示:
NpgsqlTime midnightTonight = new NpgsqlTime(24,0,0);
NpgsqlTime midnightThisMorning = new NpgsqlTime(0,0,0);
然后调用Subtract方法:
midnightTonight.Subtract(midnightThisMorning);
midnightTonight 将被标准化(由提供者静默)到00:00,减法方法的结果将是24小时但0小时的间隔?
或者,如果我们实例化两次,那么:
NpgsqlTime midnightTonight = new NpgsqlTime(24,0,0);
NpgsqlTime lateAfternoon = new NpgsqlTime(16,0,0);
然后减去:
midnightTonight.Subtract(lateAfternoon);
我们会得到16小时而不是8小时的间隔?
编辑:现在已经安装了PostgreSQL和Npgsql并且我可以测试,似乎在Subtract()上没有发生24:00到00:00的静默“规范化”,但它确实发生在Add()上。 / p>编辑:所以Subtract()没问题。我们希望答案是8,它是8。
我很高兴它不会出现在Subtract()上,我希望默认情况下它不会出现在Add()上,特别是因为公共API中有一个Normalize()方法。