如何在注册表中存储当前时间?
Posted
技术标签:
【中文标题】如何在注册表中存储当前时间?【英文标题】:How to store current time in registry? 【发布时间】:2013-06-13 22:55:27 【问题描述】:有没有办法可以在注册表中存储时间?我正在使用 MFC 并使用 CTime 对象(这允许我使用 CTimeSpan 来计算时间差),但任何 c++ 解决方案都会很棒。
【问题讨论】:
CTime
对象的内部只是一个__time_64t
,您应该可以轻松地将其存储在注册表项中。
您在存储 CTime 对象时遇到了什么问题?您只是在寻找指向 MFC 注册表类的指针吗?或者有什么你想要克服的问题?
@jwismar MFC 注册表函数写入一个 int 或字符串,但我知道时间是一个更大的值,所以不确定使用哪个 api。
@zadane 一个字符串(或二进制 blob,我猜它是一种“字符串”)是您想要的 - 查看我的答案。
【参考方案1】:
通常,我建议您使用CTime::Serialize64
来使用内置的MFC 序列化。唉,MFC 没有提供将数据序列化到注册表的简单方法......
你有两个选择:
您可以使用 Shaktal 在他的评论中推荐的路线,使用 CTime::GetTime
取回 _time64_t
。
然后您可以使用CWinApp::WriteProfileString
将该值写入注册表(但首先将其转换为字符串)。当您需要它时,使用CWinApp::GetProfileString
将其读回字符串以取回字符串,将其转换为_time64_t
并使用=
将该结果值分配给您的CTime
实例。
或者您可以使用CTime::GetAsSystemTime
将CTime64
实例中的日期和时间作为SYSTEMTIME
结构返回。然后,您可以使用CWinApp::WriteProfileBinary
在注册表中写入SYSTEMTIME
。
要稍后读回它,只需将注册表项读入带有CWinApp::GetProfileBinary
的SYSTEMTIME
并将SYSTEMTIME
传递给适当的CTime
constructor。
虽然这似乎比涉及_time64_t
的解决方案更乏味,但它在处理极端情况(例如夏令时、时区等)方面具有一些优势,这可能(或者更有可能)对您来说并不重要应用。
我给你举个例子,但我是在 iPhone 上输入的,它不是这类事情的理想界面。
【讨论】:
以上是关于如何在注册表中存储当前时间?的主要内容,如果未能解决你的问题,请参考以下文章