mirror of
				https://gitee.com/jiuyilian/embedded-framework.git
				synced 2025-10-24 18:20:15 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef HV_TIME_H_
 | |
| #define HV_TIME_H_
 | |
| 
 | |
| #include "hexport.h"
 | |
| #include "hplatform.h"
 | |
| 
 | |
| BEGIN_EXTERN_C
 | |
| 
 | |
| #define SECONDS_PER_MINUTE  60
 | |
| #define SECONDS_PER_HOUR    3600
 | |
| #define SECONDS_PER_DAY     86400   // 24*3600
 | |
| #define SECONDS_PER_WEEK    604800  // 7*24*3600
 | |
| 
 | |
| #define IS_LEAP_YEAR(year) (((year)%4 == 0 && (year)%100 != 0) || (year)%400 == 0)
 | |
| 
 | |
| typedef struct datetime_s {
 | |
|     int year;
 | |
|     int month;
 | |
|     int day;
 | |
|     int hour;
 | |
|     int min;
 | |
|     int sec;
 | |
|     int ms;
 | |
| } datetime_t;
 | |
| 
 | |
| #ifdef _MSC_VER
 | |
| /* @see winsock2.h
 | |
| // Structure used in select() call, taken from the BSD file sys/time.h
 | |
| struct timeval {
 | |
|     long    tv_sec;
 | |
|     long    tv_usec;
 | |
| };
 | |
| */
 | |
| 
 | |
| struct timezone {
 | |
|     int tz_minuteswest; /* of Greenwich */
 | |
|     int tz_dsttime;     /* type of dst correction to apply */
 | |
| };
 | |
| 
 | |
| #include <sys/timeb.h>
 | |
| HV_INLINE int gettimeofday(struct timeval *tv, struct timezone *tz) {
 | |
|     struct _timeb tb;
 | |
|     _ftime(&tb);
 | |
|     if (tv) {
 | |
|         tv->tv_sec =  (long)tb.time;
 | |
|         tv->tv_usec = tb.millitm * 1000;
 | |
|     }
 | |
|     if (tz) {
 | |
|         tz->tz_minuteswest = tb.timezone;
 | |
|         tz->tz_dsttime = tb.dstflag;
 | |
|     }
 | |
|     return 0;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| HV_EXPORT unsigned int gettick_ms();
 | |
| HV_INLINE unsigned long long gettimeofday_ms() {
 | |
|     struct timeval tv;
 | |
|     gettimeofday(&tv, NULL);
 | |
|     return tv.tv_sec * (unsigned long long)1000 + tv.tv_usec/1000;
 | |
| }
 | |
| HV_INLINE unsigned long long gettimeofday_us() {
 | |
|     struct timeval tv;
 | |
|     gettimeofday(&tv, NULL);
 | |
|     return tv.tv_sec * (unsigned long long)1000000 + tv.tv_usec;
 | |
| }
 | |
| HV_EXPORT unsigned long long gethrtime_us();
 | |
| 
 | |
| HV_EXPORT datetime_t datetime_now();
 | |
| HV_EXPORT datetime_t datetime_localtime(time_t seconds);
 | |
| HV_EXPORT time_t     datetime_mktime(datetime_t* dt);
 | |
| 
 | |
| HV_EXPORT datetime_t* datetime_past(datetime_t* dt, int days DEFAULT(1));
 | |
| HV_EXPORT datetime_t* datetime_future(datetime_t* dt, int days DEFAULT(1));
 | |
| 
 | |
| #define TIME_FMT            "%02d:%02d:%02d"
 | |
| #define TIME_FMT_BUFLEN     12
 | |
| HV_EXPORT char* duration_fmt(int sec, char* buf);
 | |
| 
 | |
| #define DATETIME_FMT        "%04d-%02d-%02d %02d:%02d:%02d"
 | |
| #define DATETIME_FMT_ISO    "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ"
 | |
| #define DATETIME_FMT_BUFLEN 30
 | |
| HV_EXPORT char* datetime_fmt(datetime_t* dt, char* buf);
 | |
| HV_EXPORT char* datetime_fmt_iso(datetime_t* dt, char* buf);
 | |
| 
 | |
| #define GMTIME_FMT          "%.3s, %02d %.3s %04d %02d:%02d:%02d GMT"
 | |
| #define GMTIME_FMT_BUFLEN   30
 | |
| HV_EXPORT char* gmtime_fmt(time_t time, char* buf);
 | |
| 
 | |
| HV_EXPORT int days_of_month(int month, int year);
 | |
| 
 | |
| HV_EXPORT int month_atoi(const char* month);
 | |
| HV_EXPORT const char* month_itoa(int month);
 | |
| 
 | |
| HV_EXPORT int weekday_atoi(const char* weekday);
 | |
| HV_EXPORT const char* weekday_itoa(int weekday);
 | |
| 
 | |
| HV_EXPORT datetime_t hv_compile_datetime();
 | |
| 
 | |
| /*
 | |
|  * minute   hour    day     week    month       action
 | |
|  * 0~59     0~23    1~31    0~6     1~12
 | |
|  *  -1      -1      -1      -1      -1          cron.minutely
 | |
|  *  30      -1      -1      -1      -1          cron.hourly
 | |
|  *  30      1       -1      -1      -1          cron.daily
 | |
|  *  30      1       15      -1      -1          cron.monthly
 | |
|  *  30      1       -1       0      -1          cron.weekly
 | |
|  *  30      1        1      -1      10          cron.yearly
 | |
|  */
 | |
| HV_EXPORT time_t cron_next_timeout(int minute, int hour, int day, int week, int month);
 | |
| 
 | |
| END_EXTERN_C
 | |
| 
 | |
| #endif // HV_TIME_H_
 | 
