各类时间转换(FILETIME,time_t,tm,QDateTime,SystemTime,LocalTime)

FILETIME转SystemTime和本地系统时间

需要先将FILETIME转为LocalFileTime
再将LocalFileTime 转为SystemTime 即为本地的系统时间

FILETIME ftcreate;
FILETIME localtime;
ftcreate.dwLowDateTime = -1491005215;
ftcreate.dwHighDateTime = 30690861;
SYSTEMTIME stcreate;
FileTimeToLocalFileTime(&ftcreate, &localtime);
FileTimeToSystemTime(&localtime, &stcreate);

此时
stcreate {
wYear=2018,
wMonth=9,
wDayOfWeek=1,
wDay=17,
wHour=10,
wMinute=25,
wSecond=8,
wMilliseconds=504
}
即2018年9月17日星期一 10:25:08

若直接将FILETIME转为SystemTime会得到Windows的系统时间,就是格林威治时间(UTC-Time)
格林威治时间(UTC-Time)=本地时间减去8个小时

FILETIME ftcreate;
ftcreate.dwLowDateTime = -1491005215;
ftcreate.dwHighDateTime = 30690861;
SYSTEMTIME stcreate;
FileTimeToSystemTime(&ftcreate, &stcreate);

此时
stcreate {
wYear=2018,
wMonth=9,
wDayOfWeek=1,
wDay=17,
wHour=2,
wMinute=25,
wSecond=8,
wMilliseconds=504
}
即2018年9月17日星期一 02:25:08

C#中,你可以通过`DateTime`结构体来处理时间和日期,而将时间字符串转换为毫秒数,可以先将时间字符串解析为`DateTime`对象,然后再转换为自Unix纪元(1970年1月1日 00:00:00)以来的毫秒数。下面是具体的步骤: 1. 使用`DateTime.Parse`或`DateTime.ParseExact`方法将时间字符串解析为`DateTime`对象。需要注意的是,解析过程中可能需要根据时间字符串的具体格式指定格式参数。 2. 使用`DateTime`对象的`ToFileTime`方法将`DateTime`对象转换FILETIME格式,这是自1601年1月1日以来的100纳秒间隔数。 3. 通过将FILETIME转换为自Unix纪元以来的毫秒数,然后再减去FILETIME与Unix纪元之间的时间差(即从1601年1月1日到1970年1月1日之间的毫秒数),从而得到自Unix纪元以来的毫秒数。 示例代码如下: ```csharp using System; using System.Globalization; class Program { static void Main() { // 假设你的时间字符串是 "2023-03-14 13:37:00" 并且使用当前的区域设置 string timeString = "2023-03-14 13:37:00"; DateTime dateTime = DateTime.Parse(timeString); // Unix纪元是1970年1月1日 DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); TimeSpan timeSpan = dateTime.ToUniversalTime() - unixEpoch; // 转换为毫秒 long milliseconds = (long)timeSpan.TotalMilliseconds; Console.WriteLine("毫秒数: " + milliseconds); } } ``` 注意,如果你的时间字符串跨越了夏令时变化点,可能需要额外的逻辑来处理夏令时的问题,因为夏令时会导致时间前进或回退一个小时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值