Vra

Ek het hier 'n brokkie: http://ideone.com/fywv3j

Plaas dit ook hier:

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

int gtime_to = 20131231;

int main() {
  time_t current_time, licence_expiry_time;
  struct tm licence_expiry_time_struct;
  memset(&licence_expiry_time_struct, 0, sizeof(struct tm));
  licence_expiry_time_struct.tm_mday = gtime_to % 100;                  // get the day
  licence_expiry_time_struct.tm_mon = ((gtime_to % 10000) / 100) - 1;   // get the month
  licence_expiry_time_struct.tm_year = gtime_to / 10000;                // get the year
  licence_expiry_time_struct.tm_hour = 0;
  licence_expiry_time_struct.tm_min = 0;
  licence_expiry_time_struct.tm_sec = 0;
  licence_expiry_time_struct.tm_wday = 0;
  licence_expiry_time_struct.tm_yday = 0;
  licence_expiry_time_struct.tm_isdst = -1;
  licence_expiry_time = mktime(&licence_expiry_time_struct);
  time(&current_time); 
  printf("date = %d, month = %d, year = %d\n", licence_expiry_time_struct.tm_mday, licence_expiry_time_struct.tm_mon, licence_expiry_time_struct.tm_year);
  printf("cur = %d, expiry = %d, diff = %d", current_time, licence_expiry_time, difftime(licence_expiry_time, current_time));
  return 0;
}

Die uitset van mkTime () is -1 Vir elke moontlike waarde waarmee ek probeer het.

Dit is die lyncur = 1386084345, expiry = -1, diff = -25165824waar die waarde van verval moet nie wees nie -1. Kan iemand my vertel waar ek verkeerd doen?

Was dit nuttig?

Oplossing

U jaar moet sedert 1900 'n vergoed wees. Dit is waarskynlik die skuldige.

Probeer:

licence_expiry_time_struct.tm_year = gtime_to / 10000 - 1900; 

Oor die algemeen, wanneer u gebruik mktime() Dit word sterk aanbeveel om met 'n geldige te begin tm struktuur in die eerste plek (dws deur te bel localtime()) en dan die velde te verander.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top