0

我们正在考虑使用 PostgreSQL,因为它遵守 ISO 8601 3.5.2,特别是在独立(未组合)时间数据类型(例如 18:50)与组合日期时间(时间戳)类型不同方面。请参阅相关的 PostgreSQL 9.2。文档。Time of Day 数据类型基于 24 小时制,与日历无关,从 00:00 运行到 24:00。

我们有 Windows 桌面并且正在考虑使用 .NET 的 npgsql 提供程序。但是我被npgsqlTime类型的 npgsql 提供程序的文档所抛出;Hours实例属性如下所示:

获取实例中保留的整小时数。请注意,可以存储时间 24:00:00 以实现往返兼容性。对此类值的任何计算都会将其标准化 [原文如此] 为 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 小时的间隔?

或者如果我们实例化两次 Times 这样:

   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() 上。

编辑:所以 Subtract() 没问题。我们希望答案是 8,它是 8。

我很高兴它不会在 Subtract() 上发生,我希望它不会在默认情况下在 Add() 上发生,特别是因为公共 API 中有 Normalize() 方法。

4

0 回答 0