时间戳转换"/>
Win32 时间戳转换
CTimeUtils.h
#pragma once#include <string>
#include <stdint.h>#ifdef _UNICODE
using _tstring = std::wstring;
#else
using _tstring = std::string;
#endif//1 秒 second = 1000 毫秒 millisecond
//1 毫秒 millisecond = 1000 微妙 microsecond
//1 微妙 microsecond = 1000 纳秒 nanosecondclass CTimeUtils
{
public://// @brief: 获取当前时间戳// @param: void// @ret: 时间戳(单位: 毫秒) 如: 1697017380617static int64_t GetCurrentTimestamp();//// @brief: 获取当前时间戳字符串// @param: void// @ret: 时间戳字符串 如: 2023-10-11 17:43:00.617static _tstring GetCurrentTimeString();//// @brief: 获取当前日期字符串// @param: void// @ret: 时间戳字符串 如: 2023-10-11 17:43:00.617static _tstring GetCurrentDateString();//// @brief: 时间戳转字符串 // @param: timestamp 时间戳 如: 1697017380617// @ret: 时间字符串 如: 2023-10-11 17:43:00.617static _tstring TimestampToString(int64_t timestamp);//// @brief: 时间戳转字符串// @param: timeString 时间字符串 如: 2023-10-11 17:43:00.617// @ret: 时间戳(单位: 毫秒) 如: 1697017380617static int64_t StringToTimestamp(const _tstring& timeString);//// @brief: 获取系统启动以来经过的毫秒数// @param: void// @ret: 毫秒数static uint64_t GetCurrentTickCount();
};
CTimeUtils.cpp
#include "CTimeUtils.h"
#include <windows.h>
#include <tchar.h>
#include <strsafe.h>int64_t CTimeUtils::GetCurrentTimestamp()
{int64_t timeStamp = 0;(void)::GetSystemTimeAsFileTime((FILETIME*)&timeStamp);return (timeStamp - 116444736000000000) / 10000;
}_tstring CTimeUtils::GetCurrentTimeString()
{TCHAR szBuf[MAX_PATH] = { 0 };SYSTEMTIME st = { 0 };(void)::GetLocalTime(&st);::StringCchPrintf(szBuf, _countof(szBuf),_T("%04d-%02d-%02d %02d:%02d:%02d.%d"),st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);return szBuf;
}_tstring CTimeUtils::GetCurrentDateString()
{TCHAR szBuf[MAX_PATH] = { 0 };SYSTEMTIME st = { 0 };(void)::GetLocalTime(&st);::StringCchPrintf(szBuf, _countof(szBuf),_T("%04d-%02d-%02d"),st.wYear, st.wMonth, st.wDay);return szBuf;
}_tstring CTimeUtils::TimestampToString(int64_t timestamp)
{TCHAR szBuf[MAX_PATH] = { 0 };SYSTEMTIME st = { 0 };FILETIME ftFile = { 0 };FILETIME ftLocal = { 0 };timestamp = timestamp * 10000 + 116444736000000000;ftFile.dwLowDateTime = timestamp & 0xFFFFFFFF;ftFile.dwHighDateTime = timestamp >> 32;::FileTimeToLocalFileTime(&ftFile, &ftLocal);::FileTimeToSystemTime(&ftLocal, &st);::StringCchPrintf(szBuf, _countof(szBuf),_T("%04d-%02d-%02d %02d:%02d:%02d.%d"),st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);return szBuf;
}int64_t CTimeUtils::StringToTimestamp(const _tstring& timeString)
{FILETIME ftFile = { 0 };FILETIME ftLocal = { 0 };SYSTEMTIME st = { 0 };::_stscanf_s(timeString.c_str(), _T("%hd-%hd-%hd %hd:%hd:%hd.%hd"),&st.wYear,&st.wMonth,&st.wDay,&st.wHour,&st.wMinute,&st.wSecond,&st.wMilliseconds);::SystemTimeToFileTime(&st, &ftLocal);::LocalFileTimeToFileTime(&ftLocal, &ftFile);int64_t timeStamp = ((int64_t)ftFile.dwHighDateTime << 32) | ftFile.dwLowDateTime;return (timeStamp - 116444736000000000) / 10000;
}uint64_t CTimeUtils::GetCurrentTickCount()
{return ::GetTickCount64();
}
更多推荐
Win32 时间戳转换
发布评论