datetime.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /*
  2. * Licensed Materials - Property of IBM and/or HCL
  3. *
  4. * IBM Informix Dynamic Server
  5. * Copyright IBM Corporation 1996, 2010
  6. * (c) Copyright HCL Technologies Ltd. 2017. All Rights Reserved.
  7. *
  8. ***************************************************************************
  9. *
  10. * Title: datetime.h
  11. * Description: include for DATETIME and INTERVAL
  12. *
  13. ***************************************************************************
  14. */
  15. #ifndef _DATETIME_H
  16. #define _DATETIME_H
  17. #include "ifxtypes.h"
  18. #include "decimal.h"
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. typedef struct dtime
  23. {
  24. int2 dt_qual;
  25. dec_t dt_dec;
  26. } dtime_t;
  27. typedef struct intrvl
  28. {
  29. int2 in_qual;
  30. dec_t in_dec;
  31. } intrvl_t;
  32. /* time units for datetime qualifier */
  33. #define TU_YEAR 0
  34. #define TU_MONTH 2
  35. #define TU_DAY 4
  36. #define TU_HOUR 6
  37. #define TU_MINUTE 8
  38. #define TU_SECOND 10
  39. #define TU_FRAC 12
  40. #define TU_F1 11
  41. #define TU_F2 12
  42. #define TU_F3 13
  43. #define TU_F4 14
  44. #define TU_F5 15
  45. /* TU_END - end time unit in datetime qualifier */
  46. /* TU_START - start time unit in datetime qualifier */
  47. /* TU_LEN - length in digits of datetime qualifier */
  48. #define TU_END(qual) (qual & 0xf)
  49. #define TU_START(qual) ((qual>>4) & 0xf)
  50. #define TU_LEN(qual) ((qual>>8) & 0xff)
  51. /* TU_ENCODE - encode length, start and end time unit to form qualifier */
  52. /* TU_DTENCODE - encode datetime qual */
  53. /* TU_IENCODE - encode interval qual */
  54. #define TU_ENCODE(len,s,e) (((len)<<8) | ((s)<<4) | (e))
  55. #define TU_DTENCODE(s,e) TU_ENCODE(((e)-(s)+((s)==TU_YEAR?4:2)), s, e)
  56. #define TU_IENCODE(len,s,e) TU_ENCODE(((e)-(s)+(len)),s,e)
  57. #define TU_FLEN(len) (TU_LEN(len)-(TU_END(len)-TU_START(len)))
  58. /* TU_CURRQUAL - default qualifier used by current */
  59. #define TU_CURRQUAL TU_ENCODE(17,TU_YEAR,TU_F3)
  60. /* TU_CURRQUAL - default qualifier used by sysdate */
  61. #define TU_SYSDQUAL TU_DTENCODE(TU_YEAR,TU_F5)
  62. MI_EXT_DECL mint dtaddinv(struct dtime *d, struct intrvl *i, struct dtime *r);
  63. MI_EXT_DECL void dtcurrent(struct dtime *d);
  64. MI_EXT_DECL mint dtcvasc(char *str, struct dtime *d);
  65. MI_EXT_DECL mint dtcvfmtasc(char *input, char *fmt, struct dtime *d);
  66. MI_EXT_DECL mint dtextend(struct dtime *id, struct dtime *od);
  67. MI_EXT_DECL mint dtsub(struct dtime *d1, struct dtime *d2, struct intrvl *i);
  68. MI_EXT_DECL mint dtsubinv(struct dtime *d, struct intrvl *i, struct dtime *r);
  69. MI_EXT_DECL mint dttoasc(struct dtime *d, char *str);
  70. MI_EXT_DECL mint dttofmtasc(struct dtime *d, char *output, mint str_len, char *fmtstr);
  71. MI_EXT_DECL mint incvasc(char *str, struct intrvl *i);
  72. MI_EXT_DECL mint incvfmtasc(char *input, char *fmt, struct intrvl *intvl);
  73. MI_EXT_DECL mint intoasc(struct intrvl *i, char *str);
  74. MI_EXT_DECL mint intofmtasc(struct intrvl *i, char *output, mint str_len, char *fmtstr);
  75. MI_EXT_DECL mint invdivdbl(struct intrvl *iv, double dbl, struct intrvl *ov);
  76. MI_EXT_DECL mint invdivinv(struct intrvl *i1, struct intrvl *i2, double *res);
  77. MI_EXT_DECL mint invextend(struct intrvl const *i, struct intrvl *o);
  78. MI_EXT_DECL mint invmuldbl(struct intrvl *iv, double dbl, struct intrvl *ov);
  79. MI_EXT_DECL mint ifx_to_gl_datetime(char *source_str, char *target_str, mint maxlen);
  80. #ifdef __cplusplus
  81. }
  82. #endif
  83. /* GL_DATETIME length */
  84. #define GLDT_LEN 80
  85. #endif /* _DATETIME_H */