First, Geo, I wouldn't try to spoil your sacred Friday, but I'm doing something very weird, and spanning timezones.
I'm using your WindowsTime stuff, and I've plugged it quite easily to do what I need it to. The trouble is that this thing is supposed to be running through Citrix, and using Local times would just create chaos - I need the files I copy to the server to have the exact server time (not UTC - though I know it's UTC internally). Most methods of copying actually preserve the time quite fine, but StrToFile() has the advantage of being able to copy files opened elsewhere (even foxuser.*) - but it sets the timestamp of the copy to current moment. Thus, I wanted to timestamp the copy same as the original. Original is on the same server (and, surprisingly though, in the same timezone).
So in the FileTime.prg, I have commented the line
lcresult = This.oConvert.LocalToFileTime(lcresult)
because it was giving me the time converted to EST (my local zone), so now I'm getting the time I should be getting... well, almost. It's one hour ahead from what I got from the wsh.filesystem file object.
The server is at GMT +1. So
lcresult = This.oConvert.SystemToFileTime(pdtdatetime)
is probably expecting... and when I set that time to be the file's time, in any directory listing it appears to be one hour ahead. (Ahead of what? It depends what's showing me the time - some tools show me CET, some show me EST - all converted from UTC, it just depends whether they take the timezone from the server or from the citrix client box).
Now do you have any idea how to force the SetFilesTime to accept the parameter as CET? MAybe I should just convert the desired time to localtime first? Ummm.
[update - yes, that seems to have worked, thanks]