2009-06-16 33 views

cevap

30

Sen Burada sadece birlikte kesmek c/sahte kodda kablolu çözümdür bir strptime kombinasyonunu mktime

struct tm tm; 
time_t epoch; 
if (strptime(timestamp, "%Y-%m-%d %H:%M:%S", &tm) != NULL) 
    epoch = mktime(&tm); 
else 
    // badness 
+1

orada biliyordu olmak zorunda strptime gibi bir şey ama bunu bulamadım.O zamanın% 99'unu kullanıyorum ve bunu desteklemiyorlar. –

+0

+1: Strptime'ı düşünüyordum ama bunun için işlev adını hatırlayamadım. – Powerlord

+3

Bir yan not olarak, Windows kullanıyorsanız, şu soruya bakın: http://stackoverflow.com/questions/321849/strptime-equivalent-on-windows – Powerlord

5

struct tm numaralı belgeyi doldurmak için, tarih/saatin her bir parçasını tamsayıya dönüştürün venumaralı telefonu kullanarak time_t numaralı telefona dönüştürün.

1

deneyebilirsiniz. İyi şanslar!

char * runner = NULL; 
char *string_orig = "YYYY-MM-DD HH:MM:SS"; 
time_t time = 0; 
struct tm tmp; 

use strstr(string_orig, "-") and atoi foreach 

    tmp->tm_year .. 
    tmp->tm_mon .. 
    tmp->tm_mday .. 
    tmp->tm_hour .. 
    tmp->tm_min .. 
    tmp->tm_sec .. 

with *runner as help 

time = mktime(&tm) 
1

Peki ya sscanf? strptime bulunmadığı durumlarda

struct tm tmVar; 
char *strVar = "YYYY-MM-DD HH:MM:SS"; 
time_t timeVar; 
if(sscanf(strVar, "%d-%d-%d %d:%d:%d", &tm.tm_year, /* the other fields */)==6) 
    timeVar = mktime(&tmVar); 
else 
    // bad format 
0

İşte hazır pasajı var:

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

time_t string_to_seconds(const char *timestamp_str) 
{ 
    struct tm tm; 
    time_t seconds; 
    int r; 

    if (timestamp_str == NULL) { 
     printf("null argument\n"); 
     return (time_t)-1; 
    } 
    r = sscanf(timestamp_str, "%d-%d-%d %d:%d:%d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec); 
    if (r != 6) { 
     printf("expected %d numbers scanned in %s\n", r, timestamp_str); 
     return (time_t)-1; 
    } 

    tm.tm_year -= 1900; 
    tm.tm_mon -= 1; 
    tm.tm_isdst = 0; 
    seconds = mktime(&tm); 
    if (seconds == (time_t)-1) { 
     printf("reading time from %s failed\n", timestamp_str); 
    } 

    return seconds; 
} 

neye ihtiyacınız için Kendinize sscanf bir dize ayarlayın. Saat dilimini görmezden gelip GMT/UTC bir timezone (veya _timezone) seconds den (time.h. DST tanımlanan küresel timezone zaten tm ait tm_isdst alanını sıfırlamak suretiyle yok sayılır substract her zaman olduğu gibi dönüştürün.