Avatar billede hsm Nybegynder
07. januar 2006 - 18:07 Der er 12 kommentarer og
2 løsninger

FileTime til DateTime

Hej Eksperter,

Jeg sidder og roder lidt med nogle URL filer. De har en linie:

Modified=203A3F4A78B4C501D5

Tiden her er angivet i FileTime format, så vidt jeg har forstået. Er der nogen der ved hvordan man konverterer denne til System.DateTime?
Avatar billede arne_v Ekspert
07. januar 2006 - 18:16 #1
du læser den vel ind som hex til en long og kalder DateTime.FromFileTime ?
Avatar billede arne_v Ekspert
07. januar 2006 - 18:19 #2
øh - skal der være 14 tegn i den tid ??
Avatar billede driis Nybegynder
07. januar 2006 - 18:27 #3
Hmm, jeg tæller 18 tegn ... men jeg ville, som arne_v, også forvente at der var 16 tegn, altså 8 bytes. Så ville konverteringen til DateTime f.eks. se sådan ud:
public static DateTime HexFileTimeToDateTime(string hex)
        {
            long ticks = long.Parse(hex, NumberStyles.HexNumber);
            return DateTime.FromFileTime(ticks);
        }
Avatar billede arne_v Ekspert
07. januar 2006 - 18:33 #4
jeg vrøvler - der er 2 for meget - og 16 + 2 er ganske rigtigt 18
Avatar billede hsm Nybegynder
07. januar 2006 - 18:55 #5
Jeg ved ikke hvorfor der er 18 tegn - men det ser der ud til at være i alle .URL filer - i hvert fald fra Internet Explorer.
Avatar billede driis Nybegynder
07. januar 2006 - 19:27 #6
Jeg fandt noget om det her:
www.cyanwerks.com/file-format-url.html+IE+URL+File+format&hl=en&client=firefox-a" target="_blank">http://64.233.183.104/search?q=cache:wZ1Bt6lKO48J:www.cyanwerks.com/file-format-url.html+IE+URL+File+format&hl=en&client=firefox-a

Det indikerer at den overskydende byte er en checksum, og giver en opskrift på hvordan man konverterer strengen til en FileTime. Jeg har forsøgt det, og det lader umiddelbart ikke til at virke. Dokumentationen for indholdet af .URL filer lader ikke til at være noget Microsoft har offentliggjort :-( Du er nok nødt til at se, om du kan finde en bedre beskrivelse af formatet på Google - med mindre jeg har lavet en eller anden åbenlys fejl i tolkningen af ovenstående link.
Avatar billede driis Nybegynder
07. januar 2006 - 19:28 #7
Jeg prøvede med dette - med strengen fra dit eksempel får jeg dog en exception med fejlbeskeden at ticks ikke er en gyldig FileTime.

long part1 = (long)Int32.Parse(hex.Substring(0,8),NumberStyles.HexNumber);
long part2 = (long)Int32.Parse(hex.Substring(8, 8), NumberStyles.HexNumber);
long ticks = ~(part1 << 32 | part2);
return DateTime.FromFileTime(ticks);
Avatar billede arne_v Ekspert
07. januar 2006 - 20:11 #8
string s = "203A3F4A78B4C501D5";
            string s2 = s.Substring(14,2) +
                        s.Substring(12,2) +
                        s.Substring(10,2) +
                        s.Substring(8,2) +
                        s.Substring(6,2) +
                        s.Substring(4,2) +
                        s.Substring(2,2) +
                        s.Substring(0,2);
            long l = long.Parse(s2, NumberStyles.HexNumber);
            DateTime dt = DateTime.FromFileTime(l);
Avatar billede arne_v Ekspert
07. januar 2006 - 20:12 #9
invertere er vist noget andet end ~ operator
Avatar billede driis Nybegynder
07. januar 2006 - 22:04 #10
Jeg tror arne har ret, jeg har læst "invert" som "invert bits"; men det er vist byte-rækkefølgen der skal inverteres.
Avatar billede hsm Nybegynder
08. januar 2006 - 09:47 #11
Yes, det løste problemet. Også tak for de andre gode bud.

Jeg har ledt rundt om på nettet, og har erfaret at formatet i .URL filerne er genstand for en del undren. Man skulle også via FileTimeToSystemTime i kernel32.dll kunne komme til en SystemTime, men det er jo nemmest at have den i en System.DateTime.

arne_v - du må lige droppe et svar så jeg kan lukke spørgsmålet.
Avatar billede arne_v Ekspert
08. januar 2006 - 09:59 #12
svar

jeg synes at du skulle give driis halvdelen fordi det var hans link der
fortalte mig at bytene skulle swappes
Avatar billede hsm Nybegynder
08. januar 2006 - 10:15 #13
I orden med mig - driis - lægger du også lige et svar?
Avatar billede driis Nybegynder
08. januar 2006 - 11:17 #14
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB