摘自:wgongfeng.blogcn.com

MFC中相关类:    
    CTime 
    CTimeSpan
    COleDateTime
    COleDateTimeSpan

API中相关时间处理函数:
    SystemTimeToFileTime
    FileTimeToSystemTime
    FileTimeToLocalTime
    SetLocalTime

这里再复习一下中学的地理。。@-@
UTC是协调世界时(Universal Time Coordinated)英文缩写,是由国际无线电咨询委员会规定和推荐,并由国际时间局(BIH)负责保持的以秒为基础的时间标度。UTC相当于本初子 午线(即经度0度)上的平均太阳时,过去曾用格林威治平均时(GMT)来表示.北京时间比UTC时间早8小时,以1999年1月1日0000UTC为例, UTC时间是零点,北京时间为1999年1月1日早上8点整。

GMT(Greenwich Mean Time)是格林尼治平均时:
由于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道 面的倾斜度所影响。为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在格林尼治子 午线上的平太阳时称为世界时(UT0),又叫格林尼治平时(GMT)。

为了确保协调世界时与世界时(UT1)相差不会超过0.9秒,有需要时便会在协调世界时内加上正或负闰秒。因此协调世界时与国际原子时(TAI)之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS)负责决定何时加入闰秒。

--------------------------------------------------------------------------------

时间单位转换
1s(秒:Second) = 1000 ms(毫秒:millisecond)
                       = 1000000 μs(微秒:microsecond)
                       = 1000000000 ns(纳秒:nanosecond)
                       = 1000000000000 ps(皮秒)
                       = 1000000000000000 fs(飞秒)

--------------------------------------------------------------------------------

1.得到当前时间
这里需要注意的是,GetLocalTime得到的是本地时区的时间,而GetSystemTime是得到UTC时间。

COleDateTime odt = COleDateTime::GetCurrentTime();
String str = odt.Format("%Y-%m-%d %H:%M:%S";
COleDateTime::Format 的使用,请参阅msdn关于CTR库中strftime, wcsftime的解释
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_strftime.2c_.wcsftime.asp

2.在指定时间的基础上,加上或者减去一段时间后,得到新的日期时间
MFC:
    COleDateTime odt = COleDateTime::GetCurrentTime();//得到当前时间
    COleDateTimeSpan odts;
    odts.SetDateTimeSpan(0, 15, 0, 0);//15个小时的时间差
    odt += odts;
    CString str = odt.Format("%Y-%m-%d %H:%M:%S";

SDK:
//FILETIME是以100纳秒作为单位
//以下宏定义了1小时内有多少个该单位
#define Nano100_SEC_IN_HOUR (ULONGLONG)60*60*10000000

SYSTEMTIME st;
GetLocalTime(&st);
FILETIME ft={0};
SystemTimeToFileTime(&st, &ft);
ULARGE_INTEGER ui;
ui.LowPart = ft.dwLowDateTime;
ui.HighPart = ft.dwHighDateTime;
ui.QuadPart += 16 * Nano100_SEC_IN_HOUR;//当前时间加上16个小时后的时间
ft.dwLowDateTime = ui.LowPart;
ft.dwHighDateTime = ui.HighPart;
FileTimeToSystemTime(&ft, &st);
//st结构体中的变量即最后结果

3.根据给定的日期,得到该日期的星期数,再得到该星期开始和结束的日期
这个功能是当时帮一个mm的忙完成的。。呵呵

COleDateTime t1, tWeekBegin, tWeekEnd;
t1.SetDate(2006,8,8);
//这里需要注意的是西方人的习惯和我们不一样,他们把星期天当作每个星期的第一天,如下面的函数GetDayOfWeek就是如此,所以我做了下面的一些转换
int nXingQi = t1.GetDayOfWeek();
COleDateTimeSpan tsWeekBegin, tsWeekEnd;
if ( 1 == nXingQi
{
tsWeekBegin.SetDateTimeSpan(6, 0, 0, 0);
tsWeekEnd.SetDateTimeSpan(0, 0, 0, 0);
}
else
{
tsWeekBegin.SetDateTimeSpan(nXingQi-2, 0, 0, 0);
tsWeekEnd.SetDateTimeSpan(8-nXingQi, 0, 0, 0);
}
tWeekBegin = t1 - tsWeekBegin;
tWeekEnd = t1 + tsWeekEnd;
CString str1 = tWeekBegin.Format("%Y-%m-%d";
CString str2 = tWeekEnd.Format("%Y-%m-%d";

4. CString -> COleDateTime
    CString str = "2006-09-04 11:22:33";
    COleVariant VariantTime;
    VariantTime = str;
    VariantTime.ChangeType(VT_DATE);
    COleDateTime DataTime = VariantTime;
    int nYear = DataTime.GetYear();
    int nMonth = DataTime.GetMonth();
    int nDay = DataTime.GetDay();
    int nHour = DataTime.GetHour();
    int nMin = DataTime.GetMinute();
    int nSec = DataTime.GetSecond();

对一些时间处理的总结相关推荐

  1. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  2. mysql关于时间的面试题,mysql时间设置默认值MySQL常见面试题

    1.limit(选出10 到20 条) select * from students order by id limit 9,10; 2.MySQL 会使用索引的操作符号 =,>,=,betwe ...

  3. Redis 笔记(09)— 过期时间 expire(设置、查询、取消过期时间)

    1. 设置过期时间 Redis 使用 expire 命令设置一个键的过期时间,到时间后 Redis 会自动删除它.expire 命令的使用方法为 expire key seconds 其中 secon ...

  4. ubuntu 修改时区、时间、同步网络时间、将时间写入硬件

    查看系统当前的时间状态 $ timedatectl statusLocal time: 六 2021-10-30 09:33:37 CSTUniversal time: 六 2021-10-30 01 ...

  5. Redis 高级特性(1)—— 事务 过期时间 排序

    1. Redis 高级特性 -- 事务 事务概念 Redis 中的事务 (transaction)是一组命令的集合.事务同命令一样是 Redis 的最小执行单位,一个事务中的命令要么都执行,要么都不执 ...

  6. Redis 笔记(03)— string类型(设置key、获取key、设置过期时间、批量设置获取key、对key进行加减、对key值进行追加、获取value子串)

    字符串 string 是 Redis 最简单的数据结构.Redis 所有的数据结构都是以唯一的 key 字符串作为名称,然后通过这个唯一 key 值来获取相应的 value 数据.不同类型的数据结构的 ...

  7. Redis 笔记(02)— keys 键相关命令(查询数据库key数量、判断key是否存在、指定key过期时间、查看key类型、查看key剩余秒数、选择数据库、删除key、删除数据库)

    1. keys 键相关命令 命令 说明 dbsize 返回当前数据路的key数量 exists key 测试指定key是否存在 expire key seconds 为key指定过期时间 type k ...

  8. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间

    题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...

  9. 将文件名和文件修改时间批量输出至Excel中

    操作系统:Windows10 软件版本:Office2019 1.打开一个空的Excel表格,Alt+F11,双击Sheet1进入代码编辑,输入代码如下: Sub main()ff = Dir(&qu ...

  10. 业余时间用哪里,哪里就有发展的可能

    平时,你的业余时间都用在哪里呀!我的业余时间一般都用在看书,写作,跑步上.我喜欢看自己喜欢的书,是因为它能使我安静,能让我领略到各种思想,能让我的思想不停的流动着:它可以丰富我自己的灵魂,它让我沉浸在 ...

最新文章

  1. Linux环境下oracle client安装和配置
  2. 北京理工大学计算机学院张教授,北京理工大学嵩天教授做客信息学院
  3. return print
  4. Effective C++ 阅读笔记(一)透彻了解inline以及降低编译依存关系
  5. CCNA考试中实验题精讲(RIP,OSPF,VLAN)
  6. js 当前日期增加自然月
  7. 使用 MIDP 底层用户接口 API
  8. ios 卡片切换效果
  9. 应用密码学(张仕斌)第四章
  10. 详解图像增强、图像复原领域技术
  11. excel打不开html格式的文件,电脑excel无法打开提示“因为文件格式或文件扩展名无效”如何解决...
  12. python 残差图_python 残差
  13. Verliog 写电子密码锁
  14. Zemax 快捷键及使用技巧(持续更新中)
  15. mysql三叶草,温州日报瓯网 - 面对温州话,你被困住了吗?
  16. 我的世界基岩版红石教程(超简单)2
  17. java实验:正n多边形类的定义与使用
  18. 定制自己的股票量化分析工具QTYX-V2.0版-使用帮助
  19. MySQL命令rename:修改表名
  20. Vijos 1165 火烧赤壁

热门文章

  1. 如何看待996的工作模式
  2. websocket ws + wss 通信
  3. 最详细的XAMPP的安装及使用教程(图文)
  4. 轻松解决yum源不能正常下载的四种方式
  5. 计算机选择位置不能选桌面,win7电脑桌面的图标无法拖动位置了怎么办?
  6. TexStudio提示:无法启动build view xelatex
  7. Failed to connect to github.com port 443: Timed out 及 ping github.com请求超时
  8. 哦耶OYE-0001 OpenWrt路由器折腾记(by quqi99)
  9. intellij idea 2016破解方法
  10. python在excel中数据画线_python中操作excel数据