ubuntuusers.de

Suche Code für Umrechnung Unix Timestamp <> DateTime in C

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

burli

Avatar von burli

Anmeldungsdatum:
27. April 2007

Beiträge: 9066

Wohnort: Petersberg

Hi, ich suche eine Funktion für die Umrechnung von einem Unix Timestamp nach DateTime in C. Ein Beispiel für die umgekehrte Richtung habe ich schon gefunden. Ich suche dafür das Gegenstück.

Bitte keine Unix Funktionen, da das Programm später auf einem AVR laufen soll. Da gibts keine Unix Library 😉

epyx

Avatar von epyx

Anmeldungsdatum:
22. März 2007

Beiträge: 48

So etwas ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <stdio.h>
#include <sys/sysinfo.h>

long getTickCount() // Zeit seit dem Booten in Sekunden
{
  struct sysinfo si;
  if(sysinfo(&si) == 0) return si.uptime;
  else return -1L;
}

int main()
{
     printf("Uptime : %2.0f min",(getTickCount()/60.0));
     return 0;
}

burli

(Themenstarter)
Avatar von burli

Anmeldungsdatum:
27. April 2007

Beiträge: 9066

Wohnort: Petersberg

Nein, ich brauche eine Routine, die eine Unix Timestamp bekommt und als Rückgabe die Zeit in Stunden, Minuten, Sekunden, Tag, Monat, Jahr liefert. Entweder als Array oder ein Type in einem Struct.

Ich brauche die eigentliche Routine, die das umrechnet. Ohne DateTime, printf oder sonstige Systemfunktionen.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Was Du suchst ist die Formatier-Routine von "Seconds since Epoch" in ein lesbares Format.

Intern macht das normalerweise die Bibliotheksfunktion strftime: http://linux.die.net/man/3/strftime
Ich hoffe mal, dass die auf Deinem System vorhanden ist.

Wenn nicht, dann müsstest Du nämlich den Quelltext davon hernehmen und die benötigten Teile dort herauspräparieren.
(das ist in der glibc zu finden - selber wirst Du es ja auch nicht besser progrogrammieren können)

LG,

track

epyx

Avatar von epyx

Anmeldungsdatum:
22. März 2007

Beiträge: 48

Und warum nimmst du dann nicht time.h und localtime ?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <time.h>


int main (int argc, char const* argv[])
{

    time_t test; 
    struct tm * timeinfo;
    test = time( NULL );
    
    printf("unix timestamp\n");
    printf("seconds since 1970 ..  %ld\n", test);
    /// Timestamp als Ascii-String ausgeben
    printf("%s\n",  asctime(gmtime(&test)));

    /// umwandeln nach tm
    timeinfo = localtime ( &test );
    /// Zugriff auf einzelne Elemente
    printf ("hours : %d\n", timeinfo->tm_hour );

    return 0;
}

Damit hast du dann eine Struktur, wo die Infos drin sind und brauchst dich um nichts zu kümmern.

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Ich habe es so verstanden, dass du keine Library dafür nutzen kannst/willst. Vielleicht ist dann ein Blick in Fefes diet libc ganz hilfreich, wie das dort implementiert ist:

http://www.fefe.de/dietlibc/

Dann dort libugly/localtime_r.c und libugly/gmtime_r.c. Kannst natürlich auch schauen, wie es in der glibc gemacht wird, ist aber imo generell recht unübersichtlich dort.

epyx

Avatar von epyx

Anmeldungsdatum:
22. März 2007

Beiträge: 48

Irgendwie hab ich das mit AVR nicht gelesen.

Bei uc.net gibt es solche Routinen für AVRs, habe sie allerdings nicht getestet.

Sry für das Missverständnis.

burli

(Themenstarter)
Avatar von burli

Anmeldungsdatum:
27. April 2007

Beiträge: 9066

Wohnort: Petersberg

Wie gesagt, dass muss auf einem AVR laufen. Da gibt es kein glib, strftime usw. Es gibt da GAR NICHTS in der Richtung. Die avr-libc ist da etwas übersichtlicher.

Die dietlibc werde ich mir mal anschauen.

burli

(Themenstarter)
Avatar von burli

Anmeldungsdatum:
27. April 2007

Beiträge: 9066

Wohnort: Petersberg

epyx schrieb:

Irgendwie hab ich das mit AVR nicht gelesen.

Wer lesen kann ist klar im Vorteil 😉

Bei uc.net gibt es solche Routinen für AVRs, habe sie allerdings nicht getestet.

Danke, hatte ich nicht gefunden. Ich schau es mir an

Antworten |