可以通過stat來讀取文件,就可以獲取到相關的文件信息。
char buf[65];
struct stat;
stat("c:\\test.txt", &sb);
sb.st_ctime 就是文件的創建時間。你可以用專localtime()
轉換成立能夠識屬別的時間。
struct tm* t=localtime(sb.st_ctime);
sprintf(buf, "%04d-%02d-%02d %02d:%02d:%02d",
t->tm_year+1900, t->tm_mon+1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec);
B. linux c strptime函數
char *strptime(const char *restrict buf, const char *restrict format, struct tm *restrict tm);
buf指向一個字元串格式的時間,函數將這個時間用format表示的格式解析,存放到tm中去
例子:
strptime("6 Dec 2001 12:33:45", "%d %b %Y %H:%M:%S", &tm);
返回值:
解析正確返回最後解析字元的下一個字元的地址,失敗返回NULL
參考
http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html
看你的寫法,是你理解錯了.
tm中的年是時間與格林尼治時間的差表示的
C. 計算機網路socket linux下用c或c++寫
/*伺服器*/
#include <arpa/inet.h>
#include <errno.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/io.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
#define szSTR 256
#define SERVERPORT 21429 /*please modify the port with your id*/
int do_listen(const int port, const int bTcp)
{
int s = 0, r = 0, o = 1;
struct sockaddr_in h;
memset(&h, 0, sizeof(h));
h.sin_family = AF_INET; h.sin_port = htons(port);
h.sin_addr.s_addr = INADDR_ANY;
s = socket(AF_INET, bTcp?SOCK_STREAM:SOCK_DGRAM, 0);
if (s < 1) { perror("socket(listen)"); return 0;}
r = setsockopt(s, SOL_SOCKET,SO_REUSEADDR, (char *)&o, sizeof(int));
if (r == -1) { perror("setsockopt(listen)"); return 0;}
r = bind(s, (struct sockaddr *)&h, sizeof(h));
if (r == -1) { perror("bind(listen)"); return 0;}
if (bTcp) {
r = listen(s, SOMAXCONN);
if (r == -1) { perror("listen()"); return 0;}
}/*end if*/
/*signal(SIGPIPE, SIG_IGN);*/
return s;
}/*end do_listen*/
void response(int sck, struct sockaddr_in * host)
{
FILE * f = 0; char cmd[szSTR]; time_t now;
struct tm * t = 0;
f = fdopen(sck, "w+");
while(!feof(f)) {
memset(cmd, 0, szSTR);
fgets(cmd, szSTR -1, f);
time(&now);
t = localtime(&now);
if(strstr(cmd, "DATE")) {
fprintf(stderr, "Query Type: Date\n");
fprintf(f, "Date: %d %d, %d\n", t->tm_mon + 1, t->tm_mday, t->tm_year + 1900);
continue;
}/*end if*/
if(strstr(cmd, "TIME")) {
fprintf(stderr, "Query Type: Time\n");
fprintf(f, "Time: %02d::%02d::%02d\n", t->tm_hour, t->tm_min, t->tm_sec);
continue;
}/*end if*/
if(strstr(cmd, "EXIT")) break;
fprintf(f, "commands: DATE, TIME, EXIT.\n");
}/*end while*/
shutdown(sck, SHUT_RDWR);
close(sck);
fclose(f);
return ;
}/*end response*/
int main(void)
{
socklen_t sklen = 0;int sck = 0, i = 0, listener = 0;
struct sockaddr_in client; pid_t proc = 0;
system("ifconfig");
listener = do_listen(SERVERPORT, 1);
if(listener < 1) { perror("listen()"); return 0; }
for(i=0;i<2;i++) {
memset(&client, 0, sizeof(client));
sklen = sizeof(client);
sck = accept(listener, (struct sockaddr *)&client, &sklen);
if(sck < 1) break;
proc = fork();
if (proc == -1) { perror("fork()"); break ; }
if(proc) continue;
response(sck, &client);
break;
}/*next*/
close(listener);
return 0;
}/*end main*/
/*客戶機*/
#include <arpa/inet.h>
#include <errno.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/io.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/times.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <time.h>
#include <unistd.h>
#define szSTR 256
#define SERVERPORT 21429 /*please modify the port with your id*/
int cnn(const char * ip, const int port)
{
struct sockaddr_in h; memset(&h, 0, sizeof(h));
h.sin_family = AF_INET; h.sin_port = htons(port);
h.sin_addr.s_addr = inet_addr(ip);
int s = socket(AF_INET, SOCK_STREAM, 0);
if (s < 1) { perror("socket(tcp)"); return 0;}
int r = connect(s, (struct sockaddr *)&h, sizeof(h));
if (r == 0) return s;
perror("connect()");
return 0;
}//end cnn
int main(void)
{
int sck = 0; FILE * f = 0; char ip[szSTR]="127.0.0.1";
fprintf(stderr, "Please input the calendar server ip:");
fgets(ip, szSTR - 1, stdin);
sck = cnn(ip, SERVERPORT);
if(sck < 1) return 0;
f = fdopen(sck, "w+");
fprintf(f, "DATE\r\n");
fgets(ip, szSTR -1 , f);
fprintf(stderr, "%s\n", ip);
fprintf(f, "TIME\r\n");
fgets(ip, szSTR -1 , f);
fprintf(stderr, "%s\n", ip);
fprintf(f, "EXIT\r\n");
fclose(f);
close(sck);
return 0;
}/*end main*/
D. linux c++ 如何獲取 系統時間
用cstlib函數time,比如
#include <iostream>
#include <cstlib>
using namespace std;
int main()
{
int t, h, m, s;
t = time( 0 );
t = t % 86400;
s = t % 60;
t = ( t - s ) / 60;
m = t % 60;
t = ( t - m ) / 60;
h = t;
cout << "現在是" << h << ":" << m << ":" << s << endl;
return 0;
}
即可顯示
E. Linux下C語言獲得系統時間的方法
沒有完整程序, 不過能提供一點資料
int gettimeofday(struct timeval * tv,struct timezone *tz);
這個函數可以獲取當前時間, 貌似只要第一個結構體就行了
struct timeval
{
time_t tv_sec; //秒 [long int]
suseconds_t tv_usec; //微秒 [long int], (10E-6 second)
};
struct timeval
{
long tv_sec;
long tv_usec;
};
然後取微秒的前三位就是小數了, 之後把秒 tv_sec 轉化為 tm 格式, 參數用秒的指針就行
struct tm * gmtime(const time_t * t);
//轉換成格林威治時間。有時稱為GMT或UTC。
struct tm * localtime(const time_t *t);
//轉換成本地時間。它可以透過修改TZ環境變數來在一台機器中,不同使用者表示不同時間.
下面是tm的部分參數
int tm_sec; //tm_sec表「秒」數,在[0,61]之間,多出來的兩秒是用來處理跳秒問題用的。/* Seconds: 0-59 (K&R says 0-61?) */
int tm_min; //tm_min表「分」數,在[0,59]之間。
int tm_hour; //tm_hour表「時」數,在[0,23]之間。
int tm_mday; //tm_mday表「本月第幾日」,在[1,31]之間。
int tm_mon; //tm_mon表「本年第幾月」,在[0,11]之間。
int tm_year; //tm_year要加1900表示那一年。 /* /* 年份,其值從1900開始 */*/
int tm_wday; //tm_wday表「本周第幾日」,在[0,6]之間。 /* Days since Sunday (0-6) */ /*其中0代表星期天,1代表星期一,以此類推 */
int tm_yday; //tm_yday表「本年第幾日」,在[0,365]之間,閏年有366日。 /*其中0代表1月1日,1代表1月2日,以此類推 */*/
int tm_isdst; //tm_isdst表是否為「日光節約時間」
------------------------------華麗麗的分割線--------------------------------------------------
由於很長時間沒編程了, 也沒有Linux環境, 我就簡單寫幾行代碼, 僅作參考
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include<unistd.h>
//這四個不一定夠用了
struct timeval tv;
struct timezone tz;
struct tm * p_tm;
//變數沒有初始化習慣不好,不要學
gettimeofday(&tv, &tz);
p_tm = gmtime( (const time_t *)&tv.tv_sec );
字元串的組裝尤其格式問題自己解決吧
年 p_tm->tm_year+ 1900
月 p_tm->tm_mon+ 1
日 p_tm->tm_mday
時 p_tm->tm_hour+ 1
分 p_tm->tm_min+ 1
秒 p_tm->tm_sec+ 1
小數點後面的部分,注意不夠三位還是前面填充0 tv.tv_sec/1000
F. 大聲的問:linux下C如何才能把當前位置的當前時間轉換成字元串,有會的木有求解決!!!謝了啦~~
當前位置的時間是什麼意思呢?系統當前時間?
time_t now;
struct tm* timeinfo;
char buf[48];
time(&now);
timeinfo = localtime(&now);
bzero(buf,48);
//2013-02-27 16:38:33這是轉化的格式,你隨便怎麼寫都成版反正是拼接
sprintf(buf,"%4d-%02d-%02d %02d:%02d:%02d",1900+timeinfo->tm_year, 1+timeinfo->tm_mon,timeinfo->tm_mday,timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
這樣當前時權間就在buf裡面了。這事獲得當前時間。
如果你要獲得各種時區的時間那麼用NTP服務同步一下就行了。
對了別忘了頭文件啊,自己man一下time()就能找到頭文件了