Boost logo

Boost Users :

From: Jeff Garland (jeff_at_[hidden])
Date: 2003-05-18 09:37:06


> I have written a function to convert a posix_time::ptime to a windows
> FILETIME (which is in essence a 64-bit value counting 100-nanosecond
> intervals since Jan 01, 1601).
>
> In order to do so, I do a time difference between
> the ptime and a time setup to the FILETIME reference time. To convert
> from this time_duration to the FILETIME count, I use
> time_duration::rep_type::ticks_per_second. Since this does not seem to
> be documented I just wanted to make sure I was using it correctly (or
> if I should be using it at all).

Yes, this is the correct way to do this.

>Here is my code (which seems to work):
>
> const ULONGLONG nanosecPerFileTimeUnit = 100;
>
> using namespace boost::posix_time;
> using namespace boost::gregorian;
> FILETIME toFileTime
> (
> const ptime& time
> )
> {
> ptime refTime(date(1601,Jan,01));
>
>
> time_duration sinceRefDate = time - refTime;
>
> ULARGE_INTEGER durationInFileTimeUnits;
> const ULONGLONG timeDurTicksPerSec =
> time_duration::rep_type::ticks_per_second;
>
> const ULONGLONG fileTimeUnitsPerTimeDurTick =
> (nanosecPerSec/timeDurTicksPerSec) / nanosecPerFileTimeUnit;
>
> durationInFileTimeUnits.QuadPart =
> sinceRefDate.ticks()*fileTimeUnitsPerTimeDurTick ;
>
> FILETIME ft;
> ft.dwLowDateTime = durationInFileTimeUnits.LowPart;
> ft.dwHighDateTime = durationInFileTimeUnits.HighPart;
>
> return ft;
> }

On quick inspections this code looks fine. Of course it will break if
you ever set a date before Jan 1 1601.

Jeff


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net