文章目录

    • 时间戳转标准时间
    • 标准时间转时间戳
    • 方法一:
    • 方法二
    • 方法三 ( 微秒 )

时间戳转标准时间

// timestamp.cpp#include #include #include #include using namespace std;typedef struct times {int Year;int Mon;int Day;int Hour;int Min;int Second;} Times;Times stamp_to_standard(int stampTime) {time_t tick = (time_t)stampTime;struct tm tm;char s[100];Times standard;// tick = time(NULL);tm = *localtime(&tick);strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", &tm);printf("%d: %s\n", (int)tick, s);standard.Year = atoi(s);standard.Mon = atoi(s + 5);standard.Day = atoi(s + 8);standard.Hour = atoi(s + 11);standard.Min = atoi(s + 14);standard.Second = atoi(s + 17);return standard;}int main(int argc, const char *argv[]) {long timeStamp = 1549133300623;// 13位时间戳,精确到毫秒stamp_to_standard(timeStamp / 1000);return 0;}

编译运行结果 结果如下:

patten@patten-hp:~/workspace/xjCollide$ g++ timestamp.cpp -std=c++11
patten@patten-hp:~/workspace/xjCollide$ ./a.out 1549133300:
2019-02-03 02:48:20 patten@patten-hp:~/workspace/xjCollide$

标准时间转时间戳

#include #include using namespace std;long standard_to_stamp(char *str_time) {struct tm stm;int iY, iM, iD, iH, iMin, iS;memset(&stm, 0, sizeof(stm));iY = atoi(str_time);iM = atoi(str_time + 5);iD = atoi(str_time + 8);iH = atoi(str_time + 11);iMin = atoi(str_time + 14);iS = atoi(str_time + 17);stm.tm_year = iY - 1900;stm.tm_mon = iM - 1;stm.tm_mday = iD;stm.tm_hour = iH;stm.tm_min = iMin;stm.tm_sec = iS;printf("%d-%0d-%0d %0d:%0d:%0d\n", iY, iM, iD, iH, iMin, iS);return (long)mktime(&stm);}int main() {char arr[20] = "2019-10-21 16:02:30";char *a = arr;std::cout << "timeStamp: " << standard_to_stamp(arr) << std::endl;return 0;}

编译运行结果 结果如下:

patten@patten-hp:~/workspace/others/cpp/demo$ g++ -g -std=c++11
main.cpp patten@patten-hp:~/workspace/others/cpp/demo$ ./a.out
2019-10-21 16:2:30 timeStamp: 1571644950
patten@patten-hp:~/workspace/others/cpp/demo$

以下几种方式都是来自网上搜集资料的汇总,对于老的方式,容易出现问题,比如:利用 ftime 函数的, ndk
下,就不通用了,编译不过(函数被弃用),下面的方式都是比较通用的做法,希望对大家有帮助。

方法一:

#include #include #include #include #include #include #include /*取当前时间,精确到微秒;*/int main(int argc, char *argv[]){auto now = std::chrono::system_clock::now();//通过不同精度获取相差的毫秒数uint64_t dis_millseconds = std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch()).count()- std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count() * 1000;time_t tt = std::chrono::system_clock::to_time_t(now);auto time_tm = localtime(&tt);char strTime[25] = { 0 };sprintf(strTime, "%d-%02d-%02d %02d:%02d:%02d %03d", time_tm->tm_year + 1900,time_tm->tm_mon + 1, time_tm->tm_mday, time_tm->tm_hour,time_tm->tm_min, time_tm->tm_sec, (int)dis_millseconds);std::cout << strTime << std::endl;return 1;}

方法二

#include #include #include #include #include #include  // use strftime to format time_t into a "date time"std::string date_time(std::time_t posix){char buf[20]; // big enough for 2015-07-08 10:06:51\0std::tm tp = *std::localtime(&posix);return {buf, std::strftime(buf, sizeof(buf), "%F %T", &tp)};} std::string stamp(){using namespace std;using namespace std::chrono; // get absolute wall timeauto now = system_clock::now(); // find the number of millisecondsauto ms = duration_cast<milliseconds>(now.time_since_epoch()) % 1000; // build output stringstd::ostringstream oss;oss.fill('0'); // convert absolute time to time_t seconds// and convert to "date time"oss << date_time(system_clock::to_time_t(now));oss << '.' << setw(3) << ms.count(); return oss.str();} int main(){std::cout << stamp() << '\n';}

方法三 ( 微秒 )

std::string stamp(){using namespace std;using namespace std::chrono; auto now = system_clock::now(); // use microseconds % 1000000 nowauto us = duration_cast<microseconds>(now.time_since_epoch()) % 1000000; std::ostringstream oss;oss.fill('0'); oss << date_time(system_clock::to_time_t(now));oss << '.' << setw(6) << us.count(); return oss.str();}