سؤال

لدي مقتطف هنا: http://eadeone.com/fywv3j

نشره هنا أيضًا:

#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;
}

إخراج mktime () هو -1 لكل قيمة ممكنة جربتها.

هذا هو الخطcur = 1386084345, expiry = -1, diff = -25165824حيث قيمة انقضاء لا ينبغي أن يكون -1. هل يمكن لأي شخص أن يخبرني أين أفعل خطأ؟

هل كانت مفيدة؟

المحلول

يجب أن يكون عامك بمثابة تعويض منذ عام 1900. على الأرجح هذا هو الجاني.

محاولة:

licence_expiry_time_struct.tm_year = gtime_to / 10000 - 1900; 

بشكل عام ، عند استخدام mktime() يوصى بشدة أن تبدأ مع صالحة tm بنية في المقام الأول (أي عن طريق الاتصال localtime()) ثم تغيير الحقول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top