Win32 时间戳转换

编程入门 行业动态 更新时间:2024-10-25 10:25:17

Win32 <a href=https://www.elefans.com/category/jswz/34/1771441.html style=时间戳转换"/>

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 时间戳转换

本文发布于:2023-11-17 06:10:44,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1639460.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:时间

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!