#ifndef TimeUtil_H_
#define TimeUtil_H_

#include <mutex>
#include <sstream>
#include <time.h>
#include <sys/time.h>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <memory>

namespace ai_matrix
{
    class TimeUtil final
    {
    public:
        static TimeUtil *getins();

        //获取时间戳
        std::string get_timestamp_file();
        std::string getDateTime_usec();
		//获取日期
//		std::string get_date();
        //获取北京当前日期
        std::string getDate();
        //获取北京当前时间
        std::string getTime();
        // 获取当前 日期 时间
        std::string getDateTime();
		//获取用于文件名的时间
		std::string getTime_file();
        //获取当前时间距1970年的毫秒数
        uint64_t getCurrentTimeMillis(bool usec = false);
        //获取指定时间距1970年的毫秒数 (入参格式：YYYY-MM-DD hh-mm-ss)
        uint64_t getParamTimeMilliSeconds(std::string &strDateTime);
        //获取指定毫秒数的对应的日期时间
        std::string getDateTimeByMilliSeconds(uint64_t i64MilliSeconds);


    private:
        TimeUtil() = default;
        TimeUtil(const TimeUtil &) = delete;
        TimeUtil(TimeUtil &&) = delete;
        TimeUtil &operator=(const TimeUtil &) = delete;
        TimeUtil &operator=(TimeUtil &&) = delete;
        ~TimeUtil() = default;

        //定义一个嵌套类，负责释放内存，操作系统自动完成，不用担心内存泄露
        class GarbageCollector
        {
        public:
            ~GarbageCollector()
            {
                if (TimeUtil::ins)
                {
                    delete TimeUtil::ins;
                    TimeUtil::ins = nullptr;
                }
            }
        };

        static GarbageCollector gc;
        static TimeUtil *ins;
        static std::mutex mx; //锁，保证线程安全
    };
}

#endif