2016-05-20 9 views
-2

Im in diese zu konvertieren versuchenPebble C konvertieren char zu Zeit für den Einsatz in Doppel difftime (time_t Ende, beginnend time_t)

static char bufferTR[] = "1645"; 

zu so etwas wie dieses ...

struct tm *tick_time = localtime(&temp); 

verwenden Funktion ...

difftime(time_t end, time_t beginning) 

was würde mir die Zeit zwischen den beiden in Sekunden geben, als ein Doppel.

Jede Hilfe würde sehr geschätzt werden.

aktualisiert Code ...

#include <stdio.h> 
#include <time.h> 

static void update_time() { 
     // Get a tm structure 
     time_t temp = time(NULL); 


    struct tm *tick_time = localtime(&temp); 

    // Create a long-lived buffer 
    //static char buffer[] = "00"; 
     char buffer[80]; 

    static char buffer2[] = "00"; 
    static char buffer3[] = "Xxx Xxx 00"; //Day of Week, Month, Date 

    strftime(buffer3, sizeof(buffer3), "%a %b %e", tick_time); 

    // Write the current hours and minutes into the buffer 
    if(clock_is_24h_style() == true) { 
    // Use 24 hour format 
    strftime(buffer, sizeof("00"), "%M", tick_time); 

    strftime(buffer2, sizeof("00"), "%H", tick_time); 

    } 
    else { 
    // Use 12 hour format 
    strftime(buffer, sizeof("00"), "%M", tick_time); 

    strftime(buffer2, sizeof("00"), "%I", tick_time); 
    } 

    //https://sourceware.org/newlib/libc.html#Timefns 

    static char bufferTR[6] = "1645"; 
    time_t beginning; 
    struct tm info; 

    int hh; 
    int mm; 

    int minutediff = 1; 

    if (sscanf(bufferTR, "%2d%2d", &hh, &mm) == 2) { 

     printf("hh %d mm %d\n", hh, mm); 

     info.tm_year = 2001 - 1900; 
     info.tm_mon = 7 - 1; 
     info.tm_mday = 4; 
     info.tm_hour = hh; 
     info.tm_min = mm; 
     info.tm_sec = 1; 
     info.tm_isdst = -1; 

     beginning = mktime(&info); 
     if(beginning == -1) 
     { 
      printf("Error: unable to make time using mktime\n"); 
     } 
     else 
     { 
      strftime(buffer, sizeof(buffer), "%c", &info); 
     } 

     time_t end; 
     struct tm info2; 
     char buffer2[80]; 

     info2.tm_year = 2001 - 1900; 
     info2.tm_mon = 7 - 1; 
     info2.tm_mday = 4; 
     info2.tm_hour = hh; 
     info2.tm_min = mm+minutediff; 
     info2.tm_sec = 1; 
     info2.tm_isdst = -1; 

     end = mktime(&info2); 
     if(end == -1) 
     { 
      printf("Error: unable to make time using mktime\n"); 
     } 
     else 
     { 
      strftime(buffer2, sizeof(buffer2), "%c", &info2); 
     } 

     printf("%f", difftime(end, beginning)); 

    } 

    // Display this time on the TextLayer 
    text_layer_set_text(s_time_layer, buffer); 
    text_layer_set_text(s_time_layer2, buffer2); 
    text_layer_set_text(s_time_layer3, buffer3); 

    text_layer_set_text(s_temp_layer, bufferTR); 
    text_layer_set_text(s_temp_layer2, buffer2); 
} 
+1

Bitte stellen Sie Ihre Frage klarer. Es ist nicht genau klar, wie sich jede gezeigte Codezeile auf die anderen Zeilen bezieht. 'pufferTR' ist ein 'char'-Puffer, aber die nächste Codezeile referenziert keine char-Puffer. 'localtime' gibt eine' struct tm * 'zurück, die nächste Codezeile akzeptiert jedoch keine' struct tm * 'Parameter. – kaylum

+1

POSIX-Funktion ['strptime()'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html) und Standard-C-Funktion ['mktime()'] (http: // pubs. opengroup.org/onlinepubs/9699919799/functions/mktime.html) kann helfen. Wenn das "hhmm" (Stunde, Minute) -Format sein soll, sind sie jedoch übertrieben. Sie können 'if (sscanf (pufferTR,"% 2d% 2d ", & hh, & mm) == 2) {... OK ...}' verwenden, um die Zeichenfolge in Stunden und Minuten zu konvertieren, und dann multiplizieren und hinzufügen gibt Ihnen die Zeit in Sekunden, ohne ein Jahr, einen Monat, einen Tag zum Arbeiten zu erfinden. –

Antwort

1

Ich gehe davon aus Sie den Unterschied zwischen 16.45 und 16.45 Uhr wollen + x.

Sagen Sie das Diff ist x = 1 Minute int minutediff = 1;. Dann können wir einfach zwischen den verschiedenen Typen konvertieren.

#include <stdio.h> 
#include <time.h> 

int main() 
{ 

    static char bufferTR[5] = "1645"; 
    time_t beginning; 
    struct tm info; 
    char buffer[80]; 

    int hh; 
    int mm; 

    int minutediff = 1; 

    if (sscanf(bufferTR, "%2d%2d", &hh, &mm) == 2) { 

     printf("hh %d mm %d\n", hh, mm); 

     info.tm_year = 2001 - 1900; 
     info.tm_mon = 7 - 1; 
     info.tm_mday = 4; 
     info.tm_hour = hh; 
     info.tm_min = mm; 
     info.tm_sec = 1; 
     info.tm_isdst = -1; 

     beginning = mktime(&info); 
     if(beginning == -1) 
     { 
      printf("Error: unable to make time using mktime\n"); 
     } 
     else 
     { 
      strftime(buffer, sizeof(buffer), "%c", &info); 
     } 

     time_t end; 
     struct tm info2; 
     char buffer2[80]; 

     info2.tm_year = 2001 - 1900; 
     info2.tm_mon = 7 - 1; 
     info2.tm_mday = 4; 
     info2.tm_hour = hh; 
     info2.tm_min = mm+minutediff; 
     info2.tm_sec = 1; 
     info2.tm_isdst = -1; 

     end = mktime(&info2); 
     if(end == -1) 
     { 
      printf("Error: unable to make time using mktime\n"); 
     } 
     else 
     { 
      strftime(buffer2, sizeof(buffer2), "%c", &info2); 
     } 

     printf("difftime %f ", difftime(end, beginning)); 

    } 

    return(0); 
} 

Ausgabe

hh 16 mm 45 
difftime 60.000000 
+0

Ich versuche den Unterschied zwischen der Zeit, die es jetzt ist, und 16:45 Uhr zu bekommen. Ich habe die Funktion updateTime hinzugefügt, die ich bis jetzt erstellt habe. ../src/main.c: In der Funktion 'update_time': ../src/main.c:121:3: error: 'return' mit einem Wert, in der Funktion void zurückgeben [-Werror] – OscarTheGrouch

Verwandte Themen