2009-10-29 12 views
0

Я строю свое собственное время unix для удобочитаемого преобразования, и я застрял.Преобразование времени unix в человекообразный формат

Я могу извлечь год просто отлично, но день оказывается слишком сложным.

/* 
    Converts a 32-bit number of seconds after 01-01-1970 to a _SYSTEMTIME structure 
*/ 
static _SYSTEMTIME Convert(unsigned long a_UnixTime) 
{ 
    newtime.wMilliseconds = 0; 
    newtime.wYear = (unsigned long)((float)a_UnixTime/(364.24f * 24.f * 60.f * 60.f)); 
    newtime.wDay = (a_UnixTime - (unsigned long)((float)newtime.wYear * 364.24f * 24.f * 60.f * 60.f)); // returns 65177 

    return newtime; 
} 

Или есть встроенная функция, которую я пропустил?

Заранее спасибо.

UPDATE:

Хм ... кажется, Windows Mobile не поддерживает STRFTIME, время или МестноеВремя, так что я все равно придется свернуть самостоятельно. :(

+0

Даже секунды будут сложными, если принять во внимание секунды прыжка. –

+0

PS. С 1970 года существует –

+0

, если Windows Mobile не имеет strftime, я бы искал что-то еще, что может быть. .. Полагаю, возможно, вам действительно придется сворачивать свои собственные, но это поражает меня, как некоторые вещь, которую они обязательно предоставили * как-то * ... нет? (Примечание. У меня есть нулевой опыт работы с Windows Mobile, либо как пользователь, либо как разработчик.) – lindes

ответ

2

Вы ищете gmtime?

struct tm * gmtime(const time_t *clock); 

External declarations, as well as the tm structure definition, are contained in the <time.h> include file. The tm structure includes at least the following fields: 

     int tm_sec;  /* seconds (0 - 60) */ 
     int tm_min;  /* minutes (0 - 59) */ 
     int tm_hour; /* hours (0 - 23) */ 
     int tm_mday; /* day of month (1 - 31) */ 
     int tm_mon;  /* month of year (0 - 11) */ 
     int tm_year; /* year - 1900 */ 
     int tm_wday; /* day of week (Sunday = 0) */ 
     int tm_yday; /* day of year (0 - 365) */ 
     int tm_isdst; /* is summer time in effect? */ 
     char *tm_zone; /* abbreviation of timezone name */ 
     long tm_gmtoff; /* offset from UTC in seconds */ 
1

Если вы хотите отформатировать для печати, вам нужно strftime(), это стандартное решение, используется вместе с, например, localtime() для преобразования необработанной метки времени более человек

 Смежные вопросы

  • Нет связанных вопросов^_^