月底的最后时间是23:59:59.99。之所以这样,是因为PostERP内含的PostgreSQL function MonthEnd()回传的时间值的精密度是0.01秒。
下例使用到MonthEnd(),所以2012-8-1 23:59:59.991+8落在下例选择期间之外:
SELECT f2 FROM t52 WHERE f2 BETWEEN '2012-8-1' AND MonthEnd(2012,8,'1') |
2012-8-1 23:59:59.991+8落在下例选择期间内:
SELECT f2 FROM t52 WHERE f2 BETWEEN '2012-8-1' AND CAST('2012-8-1 23.59.59.99999' AS TIMESTAMPTZ) |
使用者输入(日期) 23:59:59.99(时区)作为月底的最后时间,在大多数情况下,会得到正确结果。
时区
位於不同时区的海外用户在处理标的公司的资料时,必须了解:
全部的的日期和时间,是以标的公司的所在时区为参考基础。
假设你正在为位於甲公司输入资料,而且甲公司位於UTC+8时区,则无论你位於地球何处,下列陈述都成立:
标的公司就是指甲公司,月初的开始日期和时间是指甲公司所在时区的00点00分00秒,月底的最后日期和时间是指甲公司所在时区的23点59分59.99秒。
据此,甲公司在PostERP中的交易,其日期和时间凡是早於或等於2012-5-31 23:59:59.99+8者,都视为2012年6月(含当月)之前的交易。
期末结帐功能所产生的分录日期和时间,也是写入标的公司所在时区的月底日期和时间。
使用者於输入日期和时间资料时,可以把时区加入其所输入的时日资料内,也可以不把时区加入。例如:位於台湾(UTC+8)的使用者,可以输入2012-5-1 00:00:00+8,也可以输入2012-5-1 00:00:00。
但是请注意!同样这位使用者如果输入2012-5-1 00:00:00+9,则存入数据库的值其实是2012-4-30 23:15:00+0。
在屏幕[M0F5]指定标的公司的所在时区。 |
用户所在地和标的公司的时差。
PostERP对用户显示的日期和时间资料,是按个别用户所在时区显示:
假设你现在位於台湾,用PostERP的瘦客户调出某一笔甲公司的结帐资料,则瘦客户可能显示其结帐时日为2012-5-31 23:59:59.99+8。
但是上述这一笔资料,对位於英国的同事而言,他在PostERP的瘦客户看到的结帐时日是2012-5-31 15:59:59.99+0。
设计动态报表、资料速查、业务逻辑处理器时,对时间与日期的注意事项
请PostERP的开发人员参考Section 17.4系统开发之日期、时间、时区。 |