utc时间 单位换算_UTC转换本地时间
//=====================================================================
//TITLE:
// UTC转换本地时间
//AUTHOR:
// norains
//DATE:
// Friday 26- March-2010
//Environment:
// WINDOWS XP
// WINDOWS CE
//=====================================================================
一般情况下,我们很少需要用到UTC转换为本地时间--因为如果仅仅是获取本机的本地时间,我们完全可以不用如此麻烦,直接调用GetLocalTime即可。
即使万一真的需要用到UTC转换到特定时区的本地时间,只要你是在WinXP的环境下,也并不会花费太大的劲,只要调用SystemTimeToTzSpecificLocalTime函数:
SYSTEMTIME sysTime = {0};
//获取系统时间。和GetLocalTime不同,该函数返回的为UTC时间
GetSystemTime(&sysTime);
//中国时区的信息
TIME_ZONE_INFORMATION DEFAULT_TIME_ZONE_INFORMATION = {-480};
//将UTC时间转换为中国时区的本地时间
SystemTimeToTzSpecificLocalTime(&DEFAULT_TIME_ZONE_INFORMATION,&sysTime,&sysTime);
就这么简单,调用一个函数即可进行转换。可能大家唯一疑惑的是DEFAULT_TIME_ZONE_INFORMATION的取值是怎么来的,其实很简单,TIME_ZONE_INFORMATION的时差是以分钟为单位的,北京时差为8个小时,所以8*60=480。如果是别的时区,可以依此进行更改。
WinXP是简单了,但对于WinCE却是麻烦了。相对于WinXP来说,需要用到时区转换的机会更多,因为很多系统定制时,习惯于定义系统的默认语言为英文,以此加快加载速度和减小系统容量,所以在显示时间时必须要进行一次UTC的时间转换。可这更常使用的场合,却偏偏没有SystemTimeToTzSpecificLocalTime函数!
没辙,活人总不能被尿给憋死吧?微软不为我们准备,那我们就自己丰衣足食咯!
我们先从原理上想想这时区的转换,其实无非就是UTC时间偏移多少个小时,也就一个简简单单的加加减减。但问题在于,SYSTEMTIME是一个结构体,成员有秒、分、时等等。如果只是时间上的加减倒还是简单,毕竟都是60进制的;但涉及到日期,却不是一般的麻烦了。比如是今天是1号,那前一天是几号?这个不仅涉及到大小月,还有闰月的问题。不仅如此,还需要判断当前是星期几,这也不是一件轻松的事情。所以,直接采用SYSTEMTIME进行计算,对于我们来说是不太现实。
那我们换个角度来想,SYSTEMTIME不方便,那么我们转换为FILETIME来计算不就可以了么?FILETIME可是以100个亿分之一秒为单位的啊,这不就可以直接加减了么?话虽如此,但还是有个问题。我们来看看FILETIME的声明:typedef struct _FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
问题就来了,FILETIME是一个结构体,包含了两个成员,我们无法直接进行算术运算!
别急,问题还不是很严重。仔细观察一下,FILETIME是由两个DWORD组成,每个DWORD是32bit,一共64bit。那么,我们直接用一个64bit的变量存储该数值,不就可以简单地进行运算了?
所以,我们WinCE下自力更生的SystemTimeToTzSpecificLocalTime函数出炉了:BOOLSystemTimeToTzSpecificLocalTime(LPTIME_ZONE_INFORMATION lpTimeZone,LPSYSTEMTIME lpUniversalTime,LPSYSTEMTIME lpLocalTime)
{
if(lpTimeZone == NULL || lpUniversalTime == NULL || lpLocalTime == NULL)
{
//如果指针为空,则没有必要进行任何计算
return FALSE;
}
//将UTC时间由SYSTEMTIME转换为FILETIME格式
FILETIME ftUniversalTime = {0};
SystemTimeToFileTime(lpUniversalTime,&ftUniversalTime);
//将FILETIME格式时间的数值存储到一个DWORD64变量中
DWORD64 ddwUniversalTime = ftUniversalTime.dwHighDateTime;
ddwUniversalTime = ddwUniversalTime << 32;
ddwUniversalTime += ftUniversalTime.dwLowDateTime;
//因为FILETIME的时间单位是100个亿分之一秒,然后TIME_ZONE_INFORMATION的时间单位是分,所以这里需要乘以600000000
DWORD64 ddwBias = abs(lpTimeZone->Bias);
ddwBias *= 600000000;
//转换公式为:LOCAL_TIME = UTC - BIAS
DWORD64 ddwLocalTime = 0;
if(lpTimeZone->Bias > 0)
{
ddwLocalTime = ddwUniversalTime - ddwBias;
}
else if(lpTimeZone->Bias < 0)
{
ddwLocalTime = ddwUniversalTime + ddwBias;
}
//将DWORD64数值转换为FILETIME格式
FILETIME ftLocalTime = {0};
ftLocalTime.dwLowDateTime = static_cast(ddwLocalTime);
ftLocalTime.dwHighDateTime = static_cast(ddwLocalTime >> 32);
//将FILETIME数值转换为SYSTEMTIME格式并返回
return FileTimeToSystemTime(&ftLocalTime,lpLocalTime);
}
因为该函数的接口和WinXP的一模一样,所以文章开头的代码,我们可以不用做任何更改就能正确地在WinCE中运行了!
utc时间 单位换算_UTC转换本地时间相关推荐
- utc时间 单位换算_c++ 时间类型详解 time_t
Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00 ...
- utc时间 单位换算_数学基础知识点总结,常用单位换算长度、时间、面积等分类...
在所有的课程中间,数学贯穿了整个学习生涯,对于学生学习数学知识,要培养学生对数学应用价值的意识,能解决简单的实际问题.数学有助于学生理解现实生活中的数的意义,引导学生培养估算能力.下面就讲一下在实际教 ...
- 计算机系统中时间周期的单位,时间单位换算 (全),计算机单位换算大全
常用单位换算 长度单位换算 1千米=1000米 1米=10分米 1分米=10厘米 1米=100厘米 1厘米=10毫米 面积单位换算 1平方千米=100公顷 1公顷=10000平方米 1平方米=100平 ...
- utc时间 单位换算_一些时间的概念与区分(UTC、GMT、LT、TAI等)
UT - 世界时 Universal Time 世界时是最早的时间标准.在1884年,国际上将1s确定为全年内每日平均长度的1/8.64×104.以此标准形成的时间系统,称为世界时,即 UT1. 19 ...
- utc时间 单位换算_日期时间
Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 使用time模块显示当前日期和时间 开发一个以多种格式显示当前时间和日期的程序.转换秒数为GMT时间.你要 ...
- Linux下C语言时间函数使用及UTC时间转换本地时间
#include <stdio.h> #include <time.h> //gcc time_test.c -o time_test int main() {time_t n ...
- 微秒, 纳秒,毫秒, 时间单位换算
秒也是一个的时间单位,0.000 000 001 毫秒 = 1皮秒,0.000 001 毫秒 = 1纳秒,0.001 毫秒 = 1微秒,1毫秒等于0.001秒,60秒等于1分钟,60分钟等于1小时,2 ...
- ms、s、min、h时间单位换算
一.背景 有一个延迟时间的字段数据,后端默认返回的是ms,但是返回的时候有可能数据量较大,所以需要前端根据后端返回的值去换算单位. 二.代码版本更迭 1. 第一版 思路: 根据后端返回的值和换算的临界 ...
- php 把unix时间转换成时间,php unix时间戳转换成时间的方法
php unix时间戳转换成时间的方法:首先创建一个PHP示例文件:然后通过"date('Y-m-d H:i:s', 1547740800);"方式将指定的unix时间戳转换成时间 ...
- python获取本地时间_Python实例讲解 -- 获取本地时间日期(日期计算)
#! /usr/bin/env python #coding=utf-8 import time print time.strftime('%Y-%m-%d %A %X %Z',time.localt ...
最新文章
- [九度][何海涛] 数组中出现次数超过一半的数字
- shell变量设置与显示
- OpenCV为Halide后端安排网络
- python编译环境 eclipse_eclipse搭建python编译环境
- springboot 获取yml变量_springboot怎么读取不同yml配置文件
- 定时任务莫名停止,Spring 定时任务存在 Bug??
- linux进程泄漏如何定位,定位Linux下定位进程被谁KILL
- OneNote2016 解决 OneNoteGem 插件 选项卡消失的问题
- 魔兽世界——暮光高地任务攻略
- 0x0000005c蓝屏问题解决
- CAD删除全部文字(网页版)
- css灯箱放大图片,wordpress插件wordpress文章图片放大灯箱效果插件auto-highslide优化版...
- Android开发动态的监听网络状态的变化
- iVMS-4200 Vs区别_55436红单足球预测 法甲 21:00 安格斯 VS 梅斯
- 本章设计了三种不同的神经网络,神经网络简答题
- 用胶带屏蔽PCIE接口解决兼容问题,150块的P104矿渣卡也能跑深度学习
- 我的微信扫描二维码实现登录のJava
- 现在的千兆光猫都自带路由功能,是否就不需要路由器了?
- 肖战真的没我帅!我自己写的Python颜值检测说的!
- 《C专家编程》学习笔记
热门文章
- 请问在深圳做美工的工资多少
- BDC模式与OKCODE、 CALL TRANSACTION用法
- 定时删除微信文件夹中重复文件
- 百度地图LV1.5实践项目开发工具类bmap.util.jsV1.0
- h3c服务器系统丢失,某局点H3C FlexServer R390服务器阵列失败数据丢失的经验案例...
- MenuetOS小系统安装
- php是什么电器元件,看完这个保证你认识“贴片电路板上”的每一个电子元件
- 《都挺好》一部黑码农的神剧!
- 你不是不优秀,而是太着急
- 通过Python爬取必应壁纸,学XPath