用C语言获取当前系统时间,年、月、日、时、分、秒;格式为 yyyy-MM-dd HH:mm:ss

文章目录

    • C语言获取当前系统时间,格式为 yyyy-MM-dd HH:mm:ss
    • strftime 计算100天以后的日期
    • strftime 第二个参数const char *format

C语言获取当前系统时间,格式为 yyyy-MM-dd HH:mm:ss

  • 通过time_t定义一个变量这个变量的类型同unsigned long,然后通过time函数获取从1970-01-01 00:00:00到现在的秒数,再通过localtime函数转为本地时区表示,locatime函数的返回值为一个tm的结构体指针,tm结构体值包含tm_year(年,自1900年起的年数)、tm_mon(月,范围(0-11))、tm_mday(日,一月中第几天,范围(1-31))、tm_hour(小时,范围(0-23))、tm_min(分,范围(0-59))、tm_sec(秒,范围(0-59))
  • 定义一个tm的结构体指针,接收localtime将秒数转换为本地时区的结构体,再将tm指向的tm_year年数+1900,tm指向的tm_mon月数+1,再将这些值存入自定义结构体中即可获取本地的年月日时分秒时间。
#include 
#include 
#include 
#include 
#include 
#define BUF_SIZE 200

typedef struct {
	int year;
	int month;
	int day;
	int hour;
	int minute;
	int second;
}Time_YMD_HMS;


char* getNowTime()
{
	Time_YMD_HMS *curDate =(Time_YMD_HMS *)malloc(sizeof(Time_YMD_HMS));
	char *timeBuf =(char *)malloc(BUF_SIZE);
	bzero(timeBuf,BUF_SIZE);
	bzero(curDate,sizeof(Time_YMD_HMS));
	time_t now;
	struct tm *timeNow;
	time(&now);
	timeNow = localtime(&now);
	curDate->year=timeNow->tm_year+1900;
	curDate->month=timeNow->tm_mon+1;
	curDate->day=timeNow->tm_mday;
	curDate->hour=timeNow->tm_hour;
	curDate->minute=timeNow->tm_min;
	curDate->second=timeNow->tm_sec;
	// yyyy-MM-dd HH:mm:ss
	if(curDate->second < 10)
		sprintf(timeBuf, "%d-%d-%d %d:%d:0%d",curDate->year,curDate->month,curDate->day,
								curDate->hour,curDate->minute,curDate->second);
	else
		sprintf(timeBuf, "%d-%d-%d %d:%d:%d",curDate->year,curDate->month,curDate->day,
								curDate->hour,curDate->minute,curDate->second);
	free(curDate);
	return timeBuf;
}
int main(int argc, char const *argv[])
{
	while(1)
	{
    	printf("%s\n",getNowTime());
    	usleep(1000*1000);
	}
    return 0;
}

strftime 计算100天以后的日期

#include       /* puts */
#include        /* time_t, struct tm, time, localtime, strftime */
#define TIMESTRSIZE	100
void get_100days()
{
	time_t stamp;
	char timeStr[TIMESTRSIZE];
	struct tm *tm;
	stamp = time(NULL);
	tm = localtime(&stamp);
	strftime(timeStr,TIMESTRSIZE,"Current date: %Y-%m-%d %H:%M:%S",tm);
	printf("%s\n",timeStr);

	tm->tm_mday += 100;
	(void) mktime(tm);	//它会自动检测时间格式是否合法,超过范围自动转换
	strftime(timeStr,TIMESTRSIZE,"Date after 100 days: %Y-%m-%d %H:%M:%S",tm);
	puts(timeStr);
	return;
}

//strftime 参考:http://www.cplusplus.com/reference/ctime/strftime/?kw=strftime

相关函数


#include 

char *asctime(const struct tm *tm);
char *asctime_r(const struct tm *tm, char *buf);

char *ctime(const time_t *timep);
char *ctime_r(const time_t *timep, char *buf);

struct tm *gmtime(const time_t *timep);
struct tm *gmtime_r(const time_t *timep, struct tm *result);

struct tm *localtime(const time_t *timep);
struct tm *localtime_r(const time_t *timep, struct tm *result);

time_t mktime(struct tm *tm);

struct tm {
        int tm_sec;    /* Seconds (0-60) */
        int tm_min;    /* Minutes (0-59) */
        int tm_hour;   /* Hours (0-23) */
        int tm_mday;   /* Day of the month (1-31) */
        int tm_mon;    /* Month (0-11) */
        int tm_year;   /* Year - 1900 */
        int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
        int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
        int tm_isdst;  /* Daylight saving time */
    };

strftime 第二个参数const char *format

size_t strftime(char *s, size_t max, const char *format,
                       const struct tm *tm);


DESCRIPTION
       The  strftime()  function  formats  the  broken-down  time tm according to the format specification format and
       places the result in the character array s of size max.  The broken-down  time  structure  tm  is  defined  in
       <time.h>.  See also ctime(3).

       The  format  specification is a null-terminated string and may contain special character sequences called con‐
       version specifications, each of which is introduced by a '%' character and terminated by some other  character
       known as a conversion specifier character.  All other character sequences are ordinary character sequences.

       The characters of ordinary character sequences (including the null byte) are copied verbatim from format to s.
       However, the characters of conversion specifications are replaced as shown in the list below.  In  this  list,
       the field(s) employed from the tm structure are also shown.

       %a     The  abbreviated  name  of  the  day  of  the  week  according to the current locale.  (Calculated from
              tm_wday.)

       %A     The full name of the day of the week according to the current locale.  (Calculated from tm_wday.)
          %b     The abbreviated month name according to the current locale.  (Calculated from tm_mon.)

       %B     The full month name according to the current locale.  (Calculated from tm_mon.)

       %c     The preferred date and time representation for the current locale.

       %C     The century number (year/100) as a 2-digit integer. (SU) (Calculated from tm_year.)

       %d     The day of the month as a decimal number (range 01 to 31).  (Calculated from tm_mday.)

       %D     Equivalent to %m/%d/%y.  (Yecch—for Americans only.  Americans should  note  that  in  other  countries
              %d/%m/%y  is  rather  common.   This  means  that in international context this format is ambiguous and
              should not be used.) (SU)

       %e     Like %d, the day of the month as a decimal number, but a leading zero is  replaced  by  a  space.  (SU)
              (Calculated from tm_mday.)

       %E     Modifier: use alternative format, see below. (SU)

       %F     Equivalent to %Y-%m-%d (the ISO 8601 date format). (C99)

      
       %G     The  ISO 8601  week-based  year  (see NOTES) with century as a decimal number.  The 4-digit year corre‐
              sponding to the ISO week number (see %V).  This has the same format and value as %Y, except that if the
              ISO  week number belongs to the previous or next year, that year is used instead. (TZ) (Calculated from
              tm_year, tm_yday, and tm_wday.)

       %g     Like %G, but without century, that is, with a 2-digit year  (0099).  (TZ)  (Calculated  from  tm_year,
              tm_yday, and tm_wday.)

       %h     Equivalent to %b.  (SU)

       %H     The hour as a decimal number using a 24-hour clock (range 00 to 23).  (Calculated from tm_hour.)

       %I     The hour as a decimal number using a 12-hour clock (range 01 to 12).  (Calculated from tm_hour.)

       %j     The day of the year as a decimal number (range 001 to 366).  (Calculated from tm_yday.)

       %k     The  hour  (24-hour  clock) as a decimal number (range 0 to 23); single digits are preceded by a blank.
              (See also %H.)  (Calculated from tm_hour.)  (TZ)

       %l     The hour (12-hour clock) as a decimal number (range 1 to 12); single digits are preceded  by  a  blank.
              (See also %I.)  (Calculated from tm_hour.)  (TZ)

       %m     The month as a decimal number (range 01 to 12).  (Calculated from tm_mon.)
       
       %M     The minute as a decimal number (range 00 to 59).  (Calculated from tm_min.)

       %n     A newline character. (SU)

       %O     Modifier: use alternative format, see below. (SU)

       %p     Either "AM" or "PM" according to the given time value, or the corresponding strings for the current lo‐
              cale.  Noon is treated as "PM" and midnight as "AM".  (Calculated from tm_hour.)

       %P     Like %p but in lowercase: "am" or "pm" or a corresponding string for the current  locale.   (Calculated
              from tm_hour.)  (GNU)

       %r     The time in a.m. or p.m. notation.  In the POSIX locale this is equivalent to %I:%M:%S %p.  (SU)

       %R     The time in 24-hour notation (%H:%M).  (SU) For a version including the seconds, see %T below.

       %s     The  number  of  seconds  since  the  Epoch, 1970-01-01 00:00:00 +0000 (UTC). (TZ) (Calculated from mk‐
              time(tm).)

       %S     The second as a decimal number (range 00 to 60).  (The range is up to 60 to allow for  occasional  leap
              seconds.)  (Calculated from tm_sec.)

       %t     A tab character. (SU)

       %T     The time in 24-hour notation (%H:%M:%S).  (SU)
       
       %u     The  day  of  the  week  as  a  decimal,  range 1 to 7, Monday being 1.  See also %w.  (Calculated from
              tm_wday.)  (SU)

       %U     The week number of the current year as a decimal number, range 00 to 53, starting with the first Sunday
              as the first day of week 01.  See also %V and %W.  (Calculated from tm_yday and tm_wday.)

       %V     The  ISO 8601  week  number  (see NOTES) of the current year as a decimal number, range 01 to 53, where
              week 1 is the first week that has at least 4 days in the new year.  See also %U  and  %W.   (Calculated
              from tm_year, tm_yday, and tm_wday.)  (SU)

       %w     The  day  of  the  week  as  a  decimal,  range 0 to 6, Sunday being 0.  See also %u.  (Calculated from
              tm_wday.)

       %W     The week number of the current year as a decimal number, range 00 to 53, starting with the first Monday
              as the first day of week 01.  (Calculated from tm_yday and tm_wday.)

       %x     The preferred date representation for the current locale without the time.

       %X     The preferred time representation for the current locale without the date.

       %y     The year as a decimal number without a century (range 00 to 99).  (Calculated from tm_year)

       %Y     The year as a decimal number including the century.  (Calculated from tm_year)

       %z     The +hhmm or -hhmm numeric timezone (that is, the hour and minute offset from UTC). (SU)
       
       %Z     The timezone name or abbreviation.

       %+     The date and time in date(1) format. (TZ) (Not supported in glibc2.)

       %%     A literal '%' character.


参考:
https://www.runoob.com/w3cnote/cpp-time_t.html
http://www.cplusplus.com/reference/ctime/

你可能感兴趣的:(Linux环境编程,c语言)