AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Sekunden seit 1. Januar 0:00 1970
Thema durchsuchen
Ansicht
Themen-Optionen

Sekunden seit 1. Januar 0:00 1970

Ein Thema von Luckie · begonnen am 21. Jan 2003 · letzter Beitrag vom 25. Jan 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Sekunden seit 1. Januar 0:00 1970

  Alt 21. Jan 2003, 02:25
So ich bekomme die Sekunden die seit obigen Datum verstrichen sind. Jetzt würde ich gerne diese in ein gescheites Datum umrechnen.
Für ersteres habe ich schon einen Ansatz:
Delphi-Quellcode:
procedure TForm1.ListBox1Click(Sender: TObject);
const
  TAB = #9;
var
  sUser : String;
  ui11 : Pointer;
  ft : TFILETIME;
  st : TSYSTEMTIME;
  ui : ULARGE_INTEGER;
  buf1, buf2 : array[0..255] of Char;
begin
    st.wYear := 1970;
    st.wMonth := 1;
    st.wDayOfWeek := 0;
    st.wDay := 1;
    st.wHour := 0;
    st.wMinute := 0;
    st.wSecond := 0;
    st.wMilliseconds := 0;
    SystemTimeToFileTime(st,ft);
    ui.QuadPart := PUserInfo11(ui11)^.usri11_last_logon+ULARGE_INTEGER(ft).QuadPart;
    FileTimeToSystemTime(TFileTime(ui),st);
    GetTimeFormat(LOCALE_USER_DEFAULT, TIME_FORCE24HOURFORMAT, @st, nil, buf1, sizeof(buf1));
    GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, @st, nil, buf2, sizeof(buf2));
    Memo1.Lines.Add('Last-Logon'+TAB+': '+String(buf2)+' / '+String(buf1) );
  end;
  NetAPIBufferFree(ui11);
end;
Nur leider stimmt das:
Zitat:
Last-Logon : 1970-01-01 / 00:01:44
nicht. Da war ich noch nicht mal geboren, geschweige denn dass ich mich da schon an meinem jetztigen Rechner eingeloggt hätte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 21. Jan 2003, 07:55
Hallo Luckie,

ich war da schon geboren und bin sogar schon zur Schule gegangen. Deshalb kann ich vielleicht helfen .

Delphi-Quellcode:
 
  with st do
  begin
    Datum := EncodeDate(year, month, Day);
    Zeit := EncodeTime(Hour, Minute, Second, Milliseconds);
  end;
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#3
  Alt 21. Jan 2003, 08:19
Ändert sich was, wenn du den DWORD-Wert als int64 castest, Luckie?
Wie bei INetTime:
Code:
ui.QuadPart := int64(PUserInfo11(ui11)^.usri11_last_logon) +
  ULARGE_INTEGER(ft).QuadPart;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 21. Jan 2003, 11:21
@MrSpock: Kann ich leider nicht brauchen, da es später nonVCL werden soll.

@Mathias: Hilft leider aich nicht.

Aber ich habe was gefunden.
Delphi-Quellcode:
st.wYear := 1970;
st.wMonth := 1;
st.wDayOfWeek := 0;
st.wDay := 1;
st.wHour := 0;
st.wMinute := 0;
st.wSecond := 0;
st.wMilliseconds := 0;
SystemTimeToFileTime(st,ft);
RaiseLastOsError;
RaisLastOSError liefert: "Aufruf einer Systemfunktion fehlgeschlagen." Und das stimmt auch mit meiner Beobachtung über ein. Als Datum bekomme ich nämlich immer das, was ich in die Struktur eintrage.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5
  Alt 21. Jan 2003, 11:26
Du willst also einen UNIX-Timestamp in eine lesbare Zeitangabe umrechnen? Das hatten wir hier schon mal: http://www.delphipraxis.net/viewtopic.php?t=1030. Im vorletzten Post wurde laut Autor eine Lösung gefunden.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 21. Jan 2003, 11:53
Danke für den Hinweis. Da gibt es nur ein Probleme, wie ich schon zu Spitzohr gesagt habe, es muß ohne SysUtils gehen.

Der Hinweis von Christian auf die Stelle im PSDK hab eich gefunden, nur leider kennt Delphi kein Int32x32To64.

Zitat:
The time functions included in the C run-time use the time_t type to represent the number of seconds elapsed since midnight, January 1, 1970. The following example converts a time_t value to a file time, using the Int32x32To64 function.
Code:
void TimetToFileTime( time_t t, LPFILETIME pft )
{
    LONGLONG ll = Int32x32To64(t, 10000000) + 116444736000000000;
    pft->dwLowDateTime = (DWORD) ll;
    pft->dwHighDateTime = ll >>32;
}
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7
  Alt 21. Jan 2003, 12:04
Luckie, schon mal in die "WinNT.h" geguckt?
Code:
#define Int32x32To64(a, b) ((LONGLONG)((LONG)(a)) * (LONGLONG)((LONG)(b)))
Oder, wenn mich mein bisschen Wissen nicht trügt:
Delphi-Quellcode:
function Int32x32To64(const a, b: dword): int64;
begin
  Result := int64(a) * int64(b);
end;
Und zu dem "nichts bringen": vielleicht fehlt in der Logon-Zeit auch das 10-Mio-Intervall? Sprich die Anzahl der 100ns-Intervalle?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8
  Alt 21. Jan 2003, 12:17
ja, ja, jaaaaa. Mathias du bist ein Schatz.

Halt alles zurück. Da stimmt was nicht.

Noch mal von vorne. Das habe ich jetzt:
Delphi-Quellcode:
function Int32x32To64(const a, b: dword): int64;
begin
  Result := int64(a) * int64(b);
end;

procedure TForm1.ListBox1Click(Sender: TObject);
const
  TAB = #9;
var
  sUser : String;
  ui11 : Pointer;
  ft : TFILETIME;
  st : TSYSTEMTIME;
  ui : ULARGE_INTEGER;
  li : longint;
  buf1, buf2 : array[0..255] of Char;
begin
  Memo1.Clear;
  sUser := Listbox1.Items.Strings[Listbox1.ItemIndex];
  if sUser <> ''then
  begin
    NetUserGetInfo(nil, PWideChar(WideString(sUser)), 11, ui11);
   {st.wYear            := 1970;
    st.wMonth            := 1;
    st.wDayOfWeek        := 0;
    st.wDay              := 1;
    st.wHour            := 0;
    st.wMinute          := 0;
    st.wSecond          := 0;
    st.wMilliseconds    := 0;
    SystemTimeToFileTime(st,ft);
    ui.QuadPart := int64(PUserInfo11(ui11)^.usri11_last_logon)+ULARGE_INTEGER(ft).QuadPart;
    FileTimeToSystemTime(TFileTime(ui),st);}

    li := Int32x32To64(PUserInfo11(ui11)^.usri11_last_logon, 10000000) + 116444736000000000;
    ft.dwLowDateTime := DWORD(li);
    ft.dwHighDateTime := li shl 32;
    FileTimeToSystemTime(TFileTime(ui),st);
    GetTimeFormat(LOCALE_USER_DEFAULT, TIME_FORCE24HOURFORMAT, @st, nil, buf1, sizeof(buf1));
    GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, @st, nil, buf2, sizeof(buf2));
    Memo1.Lines.Add('Last-Logon'+TAB+': '+String(buf2)+' / '+String(buf1) );
end;
  NetAPIBufferFree(ui11);
end;
Jetzt bin ich schon seit 1601-01-01 / 00:00:00 eingeloggt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#9
  Alt 21. Jan 2003, 15:46
http://manfred.maday.bei.t-online.de/page6_5.htm

schau dir mal Punkt 10.1 an. Bei korrekten Eingabewerten sollte damit auch eine richtige Umrechnung ohne VCL möglich sein.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10
  Alt 21. Jan 2003, 17:23
Danke für den Link. Aber es muß auch so mit API-Funktionen gehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz