C обрезать ЧЧ:ММ:СС из значения ctime, ctime

У меня есть временная метка unix, которая при преобразовании с использованием ctime отображается как Thu Mar 26 15:30:26 2007, но мне нужно только Thu Mar 26 2007.

Как изменить или обрезать, чтобы исключить время (ЧЧ:ММ:СС)?


person Lincon    schedule 29.01.2013    source источник


Ответы (2)


Поскольку у вас есть значение time_t, вы можете использовать localtime() и < a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html" rel="nofollow">strftime():

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

int main(void)
{
    time_t t = time(0);
    struct tm *lt = localtime(&t);
    char buffer[20];
    strftime(buffer, sizeof(buffer), "%a %b %d %Y", lt);
    puts(buffer);
    return(0);
}

В качестве альтернативы, если вы чувствуете, что должны использовать ctime(), то:

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

int main(void)
{
    time_t t = time(0);
    char buffer[20];
    char *str = ctime(&t);
    memmove(&buffer[0],  &str[0],  11);
    memmove(&buffer[11], &str[20],  4);
    buffer[15] = '\0';
    puts(buffer);
    return(0);
}
person Jonathan Leffler    schedule 29.01.2013

Из справочной страницы strptime():

В следующем примере показано использование strptime() и strftime().

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

   int main() {
           struct tm tm;
           char buf[255];

           strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
           strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
           puts(buf);
           return 0;
   }

Приспособьтесь к своим потребностям.

person favoretti    schedule 29.01.2013