首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SYSTEMTIME上执行算术

在SYSTEMTIME上执行算术
EN

Stack Overflow用户
提问于 2011-11-29 17:12:04
回答 3查看 13K关注 0票数 6

我有一个用SYSTEMTIME表示的时间值,我想用它加减1小时,得到新获得的SYSTEMTIME。

如果有一些在SYSTEMTIME上进行算术运算的windows api,谁能帮我解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-29 17:16:50

如果您使用的是C# (或VB.NET或ASP.NET),则可以使用

代码语言:javascript
复制
DateTime dt = DateTime.Now.AddHours(1);

你可以使用负数来减去:

代码语言:javascript
复制
DateTime dt = DateTime.Now.AddHours(-1);

编辑:I从this post中提取一个搜索器

他们建议将SYSTEMTIME转换为FILETIME,FILETIME是一个纪元以来的节拍数量。然后,您可以添加所需的“滴答数”(即100 and间隔)来表示您的时间,并转换回SYSTEMTIME。

ULARGE_INTEGER结构是一个具有QuadPart成员的联合,它是一个64位的数字,可以直接添加到(在最近的硬件上)。

代码语言:javascript
复制
SYSTEMTIME add( SYSTEMTIME s, double seconds ) {

    FILETIME f;
    SystemTimeToFileTime( &s, &f );

    ULARGE_INTEGER u  ; 
    memcpy( &u  , &f , sizeof( u ) );

    const double c_dSecondsPer100nsInterval = 100. * 1.E-9;
    u.QuadPart += seconds / c_dSecondsPer100nsInterval; 

    memcpy( &f, &u, sizeof( f ) );

    FileTimeToSystemTime( &f, &s );
    return s;
 }

如果您想增加一个小时,请使用SYSTEMTIME s2 = add(s1, 60*60)

票数 13
EN

Stack Overflow用户

发布于 2013-05-29 04:18:36

要在C++中添加有符号秒数(在时间上向前或向后):

代码语言:javascript
复制
const double clfSecondsPer100ns = 100. * 1.E-9;
void iAddSecondsToSystemTime(SYSTEMTIME* timeIn, SYSTEMTIME* timeOut, double tfSeconds)
{
    union {
        ULARGE_INTEGER li;
        FILETIME       ft;
    };

    // Convert timeIn to filetime
    SystemTimeToFileTime(timeIn, &ft);

    // Add in the seconds
    li.QuadPart += tfSeconds / clfSecondsPer100ns;

    // Convert back to systemtime
    FileTimeToSystemTime(&ft, timeOut);
}
票数 7
EN

Stack Overflow用户

发布于 2013-12-09 01:16:16

代码语言:javascript
复制
#include <stdio.h>
#include <windows.h>
#define NSEC 60*60

main()
{
SYSTEMTIME st;
FILETIME ft;

// Get local time from system
GetLocalTime(&st);

printf("%02d/%02d/%04d %02d:%02d:%02d\n",
  st.wDay,st.wMonth,st.wYear,st.wHour,st.wMinute,st.wSecond);

// Convert to filetime
SystemTimeToFileTime(&st,&ft);

// Add NSEC seconds
((ULARGE_INTEGER *)&ft)->QuadPart +=(NSEC*10000000LLU);

// Convert back to systemtime
FileTimeToSystemTime(&ft,&st);

printf("%02d/%02d/%04d %02d:%02d:%02d\n",
  st.wDay,st.wMonth,st.wYear,st.wHour,st.wMinute,st.wSecond);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8308236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档