FileTime umwandeln in Datum und Zeit

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: FileTime umwandeln in Datum und Zeit

BeitragSa, Apr 11, 2015 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ja also es geht darum das ich den befehl FileTime nutzen möchte dieser befehl liest den zeitwert der datei aus, und es gibt mir so ein ergebnis: 1428628046 ... wie bekomme ich diese angabe nun schön in

(Tag,Mon,Jahr,STD,Min, eventuell SEK)

hat jemand eine saubere antwort für mich?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
 

#Reaper

Newsposter

BeitragSa, Apr 11, 2015 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Also die Filetime ist eine Unix-Time. Ob BMax jetzt Funktionen (es gibt Standard-C-Funktionen dafür) dafür hat, weiß ich ehrlich gesagt gar nicht mehr. Auf die Schnelle konnte ich da nun nichts finden, aber CurrentTime() und CurrentDate() verwenden ebenfalls intern die Unixtime, da könntest du auch im Quelltext nachschauen. Ansonsten müsstest du mal danachgoogeln. Andernfalls findest du über das Stichwort auch so irgendwo, wie man das händisch umrechnen könnte.
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Thunder

BeitragMo, Apr 13, 2015 18:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Notfall kannst du auch googlen nach einer Implementierung. Ich hab nach "convert unix timestamp to date c++" gegoogelt und folgendes auf stackoverflow gefunden:

http://stackoverflow.com/quest...dable-date

Das sind 4 Zeilen, die man sich schnell in das Modul als Funktion hineinkompilieren kann und fertig.

Wenn du dich allerdings für die Implementierung interessierst, dann müsstest du eben dich mit Unix-Zeit beschäftigen. Was du da bekommst ist nämlich (laut meinem Vorposter - ich habe das nicht überprüft) die Anzahl der vergangenen Sekunden seit 1. Januar 1970 00:00 Uhr UTC
 

sinjin

BeitragMo, Apr 13, 2015 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder man benutzt einfach Kernel32 (ich bin auch gerade dabei die WIN API zu nutzen, aber so ungefähr gehts in BMAX):
Code: [AUSKLAPPEN]
import "-lkernel32"
extern "win32"
  function GetFileTime(hnd%,fsize:byte ptr)
'  oder, ich denke das geht: function GetFileTime(hnd%,fsize:long)
  function FileTimeToSystemTime(in:tfsz,out:apitime)
endextern

type tfsz
  field low%
  field hi%
endtype

type tapitime
  field wYear:short
  field wMonth:short
  field wDayOfWeek:short
  field wDay:short
  field wHour:short
  field wMinute:short
  field wSecond:short
  field wMilliseconds:short
endtype

function gettime(fsz:tfsz,out:tapitime)
  FileTimeToSystemTime fsz,out
endfunction


Das will ich auch noch machen, aber so ungefähr muss es aussehen. Man muss die Datei erst öffnen um das Handle zu bekommen.

Mathias-Kwiatkowski

BeitragDi, Apr 14, 2015 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
ohman das hörrt sich echt nach stress an Very Happy .... mit win api (Kernel32) ect kenn ich mich 0 aus ^^
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

Thunder

BeitragDi, Apr 14, 2015 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Bedenke, dass du wegen so einer Kleinigkeit die (theoretische) Plattformunabhängigkeit von BlitzMax verlierst, wenn du WinAPI dafür verwendest.

Mathias-Kwiatkowski

BeitragDi, Apr 14, 2015 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy ja aber das wäre ja egal ^^...
da max nur nahezu os unabhängig ist würde das vollkommen reichen...
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
 

sinjin

BeitragMo, Apr 20, 2015 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab's fast, nur ein Problem habe ich mit FileTimeToSystemTime:

Code: [AUSKLAPPEN]
import "-lkernel32"
extern "win32"
  const INVALID_HANDLE_VALUE%=-1

  const GENERIC_READ%=$80000000
  const FILE_ATTRIBUTE_NORMAL%=$80
  const OPEN_EXISTING%=3

  const FILE_SHARE_READ%=$1
  const FILE_SHARE_WRITE%=$2
  const FILE_SHARE_READWRITE%=FILE_SHARE_READ|FILE_SHARE_WRITE

  function CreateFileW%(lpFileName$z,dwDesiredAccess%,dwShareMode%..
    ,lpSecurityAttributes%,dwCreationDisposition%,dwFlagsAndAttributes%,hTemplateFile%)="CreateFileA@28"
  function CloseHandle%(hObject%)
  function GetFileTimeW%(hfile%,lpCreationTime:long var,lpLastAccessTime:long var,lpLastWriteTime:long var)="GetFileTime@16"
  function FileTimeToSystemTime%(lpFileTime:long,lpSystemTime:tapitime var)="FileTimeToSystemTime@8"
'  function FileTimeToLocalFileTime%(lpFileTime:long,lpLocalFileTime:long var)="FileTimeToLocalFileTime@8"
  function SystemTimeToTzSpecificLocalTime%(lpTimeZone%,lpUniversalTime:tapitime,lpLocalTime:tapitime var)
endextern

type tapitime
  field Year:short
  field Month:short
  field DayOfWeek:short
  field Day:short
  field Hour:short
  field Minute:short
  field Second:short
  field Milliseconds:short
endtype

function getfiletime%(url$,at:tapitime)
  local hndl%=createfilew(url,GENERIC_READ,FILE_SHARE_READWRITE,null,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,null)
  if (hndl=INVALID_HANDLE_VALUE) then return -1
  local lpCreationTime:long,lpLastAccessTime:long,lpLastWriteTime:long
  if GetFileTimeW(hndl,lpCreationTime,lpLastAccessTime,lpLastWriteTime) then
    FileTimeToSystemTime lpCreationTime,at       '<- was läuft hier falsch?
    SystemTimeToTzSpecificLocalTime null,at,at
  endif
  CloseHandle hndl
endfunction

local p:tapitime=new tapitime
getfiletime "test.file",p

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group