Изменение значений даты и времени с использованием SYSTEMTIME, FILETIME и ULARGE_INTEGER
Я делаю программу на C++ с использованием Visual Studio 2005, которая должна создавать водяной знак со временем на наборе изображений.
Эти изображения взяты из видео, которые были обработаны через определенные промежутки времени. Я пытаюсь изменить время на каждом изображении с помощью SYSTEMTIME. Я посмотрел на MSDN, и он говорит не изменять значения внутри самой SYSTEMTIME, а преобразовать его в FILETIME, а затем в ULARGE_INTEGER. Мой вопрос: как разделен ULARGE_INTEGER? Является ли HighPart датой, а Low - временем, и если это так, как мне принять во внимание опрокидывание? Например, если изображение появляется в 23:58 25.02.2011 и продолжается до 12:11 26.02.2011? Будет ли просто добавление указанного значения автоматически учтено и показано, когда я преобразую его обратно в переменную SYSTEMTIME?
Заранее спасибо за помощь.
1 ответ
Они предлагают конвертировать SYSTEMTIME
в FILETIME
, что является числом тиков с эпохи. Затем вы можете добавить необходимое количество "тиков" (то есть интервалы 100 нс), чтобы указать свое время, и преобразовать обратно в 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;
}