timezone.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #ifndef TIMEZONE_H
  2. #define TIMEZONE_H
  3. struct timezone;
  4. struct timezone_trans;
  5. typedef struct ttinfo
  6. {
  7. int offset;
  8. int isdst;
  9. unsigned int abbr_idx;
  10. unsigned int isstdcnt;
  11. unsigned int isgmtcnt;
  12. } ttinfo;
  13. struct timezone_transition
  14. {
  15. int start;
  16. int end;
  17. ttinfo info;
  18. };
  19. //C语言默认参数的方式
  20. #define TIMEZONE_NOFIXED INT_MIN
  21. struct timezone *timezone_open(char *name);
  22. const char * timezone_version_get();
  23. const char * timezone_name_get(struct timezone *tz);
  24. int timezone_offset_get(struct timezone *tz, int time); //time is gmt time
  25. int timezone_offset_get_local(struct timezone *tz, int time); //time is local time
  26. int timezone_transition_get(struct timezone *tz, int time, struct timezone_transition **trans);
  27. int timezone_fixed_offset(struct timezone *tz);
  28. int timezone_get_timestamp(struct timezone *tz, int time, int offset);
  29. int timezone_get_localtime(struct timezone *tz, int time, int offset);
  30. //return count, and first point.
  31. int timezone_transitions(struct timezone *tz, struct timezone_transition **trans);
  32. void timezone_dump_tzinfo(struct timezone *tz);
  33. void timezone_close(struct timezone *tz);
  34. //timezone trans的一个接口,用户两个时区进行转换的情况
  35. //这个时间的转换是非线程安全的
  36. //如果是在多线程下面运行,一定要保证每个线程运行一个转换实例
  37. //转换添加了cache,这样就算转多个货币对的情况,而且在tick更新,更新所有的货币对的情况。
  38. //可以进一步的提高性能。
  39. struct timezone_trans* timezone_trans_new(char *in , int inoffset, char *out, int outoffset, int cache_second);
  40. int timezone_trans_offset(struct timezone_trans *tz_trans, int time);
  41. int timezone_trans_in2gmt(struct timezone_trans *tz_trans, int time);
  42. int timezone_trans_gmt2out(struct timezone_trans *tz_trans, int newtime);
  43. void timezone_trans_free(struct timezone_trans *tz_trans);
  44. #ifdef _DEBUG
  45. #define TRACE0(sz) fprintf(stderr, "%s", sz)
  46. #define TRACE1(sz, p1) fprintf(stderr, sz, p1)
  47. #define TRACE2(sz, p1, p2) fprintf(stderr, sz, p1, p2)
  48. #define TRACE3(sz, p1, p2, p3) fprintf(stderr, sz, p1, p2, p3)
  49. #else
  50. #define TRACE0(sz)
  51. #define TRACE1(sz, p1)
  52. #define TRACE2(sz, p1, p2)
  53. #define TRACE3(sz, p1, p2, p3)
  54. #endif
  55. #endif