osTime.h 3.0 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
/*
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
 *
 * This program is free software: you can use, redistribute, and/or modify
 * it under the terms of the GNU Affero General Public License, version 3
 * or later ("AGPL"), as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

S
Shengliang Guan 已提交
16 17
#ifndef _TD_OS_TIME_H_
#define _TD_OS_TIME_H_
18 19 20 21 22

#ifdef __cplusplus
extern "C" {
#endif

wafwerar's avatar
wafwerar 已提交
23 24
#include <time.h>

wafwerar's avatar
wafwerar 已提交
25
// If the error is in a third-party library, place this header file under the third-party library header file.
wafwerar's avatar
wafwerar 已提交
26
// When you want to use this feature, you should find or add the same function in the following section.
wafwerar's avatar
wafwerar 已提交
27 28 29 30 31 32 33 34
#ifndef ALLOW_FORBID_FUNC
    #define strptime STRPTIME_FUNC_TAOS_FORBID
    #define gettimeofday GETTIMEOFDAY_FUNC_TAOS_FORBID
    #define localtime_s LOCALTIMES_FUNC_TAOS_FORBID
    #define localtime_r LOCALTIMER_FUNC_TAOS_FORBID
    #define time TIME_FUNC_TAOS_FORBID
#endif

S
Shengliang Guan 已提交
35
#if defined(_TD_WINDOWS_64) || defined(_TD_WINDOWS_32)
36 37 38

  #define CLOCK_REALTIME 	0

wafwerar's avatar
wafwerar 已提交
39
  #define MILLISECOND_PER_SECOND (1000i64)
S
Shengliang Guan 已提交
40 41 42 43 44 45 46 47
#else
  #define MILLISECOND_PER_SECOND ((int64_t)1000L)
#endif

#define MILLISECOND_PER_MINUTE (MILLISECOND_PER_SECOND * 60)
#define MILLISECOND_PER_HOUR   (MILLISECOND_PER_MINUTE * 60)
#define MILLISECOND_PER_DAY    (MILLISECOND_PER_HOUR * 24)
#define MILLISECOND_PER_WEEK   (MILLISECOND_PER_DAY * 7)
D
dapan1121 已提交
48 49 50 51 52 53 54 55

#define NANOSECOND_PER_USEC   (1000L)
#define NANOSECOND_PER_MSEC   (1000000L)
#define NANOSECOND_PER_SEC    (1000000000L)
#define NANOSECOND_PER_MINUTE (NANOSECOND_PER_SEC * 60)
#define NANOSECOND_PER_HOUR   (NANOSECOND_PER_MINUTE * 60)
#define NANOSECOND_PER_DAY    (NANOSECOND_PER_HOUR * 24)
#define NANOSECOND_PER_WEEK   (NANOSECOND_PER_DAY * 7)
S
Shengliang Guan 已提交
56

S
Shengliang Guan 已提交
57 58
int32_t taosGetTimeOfDay(struct timeval *tv);

59 60 61 62 63 64
//@return timestamp in second
int32_t taosGetTimestampSec();

//@return timestamp in millisecond
static FORCE_INLINE int64_t taosGetTimestampMs() {
  struct timeval systemTime;
S
Shengliang Guan 已提交
65
  taosGetTimeOfDay(&systemTime);
66 67 68 69 70 71
  return (int64_t)systemTime.tv_sec * 1000L + (int64_t)systemTime.tv_usec / 1000;
}

//@return timestamp in microsecond
static FORCE_INLINE int64_t taosGetTimestampUs() {
  struct timeval systemTime;
S
Shengliang Guan 已提交
72
  taosGetTimeOfDay(&systemTime);
73 74 75 76 77 78 79 80 81 82
  return (int64_t)systemTime.tv_sec * 1000000L + (int64_t)systemTime.tv_usec;
}

//@return timestamp in nanosecond
static FORCE_INLINE int64_t taosGetTimestampNs() {
  struct timespec systemTime = {0};
  clock_gettime(CLOCK_REALTIME, &systemTime);
  return (int64_t)systemTime.tv_sec * 1000000000L + (int64_t)systemTime.tv_nsec;
}

wafwerar's avatar
wafwerar 已提交
83 84 85
char *taosStrpTime(const char *buf, const char *fmt, struct tm *tm);
struct tm *taosLocalTime(const time_t *timep, struct tm *result);

86 87 88 89
#ifdef __cplusplus
}
#endif

S
Shengliang Guan 已提交
90
#endif  /*_TD_OS_TIME_H_*/