使用SYSTEMTIME,FILETIME和ULARGE_INTEGER修改日期和时间值

Seb*_*Seb 8 c++ windows systemtime filetime

我正在使用Visual Studio 2005在C++中创建一个程序,它需要在一组图像上创建带有时间的水印.

这些图像来自以特定时间间隔处理的视频.我想要做的是通过SYSTEMTIME修改每个图像的时间.我查看了MSDN,它说不修改SYSTEMTIME本身的值,而是将其转换为FILETIME,然后转换为ULARGE_INTEGER.我的问题是ULARGE_INTEGER是如何拆分的?HighPart是日期,Low Part是时间,如果是这样,我如何考虑翻转?比如图像出现在2011年2月25日晚上11:58并持续到2011年2月26日12:11?只是添加指定的值会被自动考虑并在我将其转换回SYSTEMTIME变量时显示吗?

在此先感谢您的帮助.

xto*_*ofl 8

他们建议转换SYSTEMTIMEFILETIME,自一个时代以来的许多刻度.然后,您可以添加所需数量的"刻度"(即100ns间隔)以指示您的时间,然后转换回SYSTEMTIME.

ULARGE_INTEGER结构是具有一个联盟QuadPart成员,这是一个64位的数,即可以直接加入到(最近的硬件).

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;
    const double c_dNumberOf100nsIntervals = 
                    seconds / c_dSecondsPer100nsInterval;

    // note: you may want to round the number of intervals.
    u.QuadPart += c_dNumberOf100nsIntervals;

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

    FileTimeToSystemTime( &f, &s );
    return s;
 }
Run Code Online (Sandbox Code Playgroud)