#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
/*============ Substring Function ===================*/
char *substring(size_t start, size_t stop, const char *src, char *dst, size_t size)
{
int count = stop - start;
if ( count >= --size )
{
count = size;
}
sprintf(dst, "%.*s", count, src + start);
return dst;
}
/*=================== Substring Function ==================*/
/*================== Time diff Function ====================*/
int date_diff(char nowdate[20], int diff)
{
int i,maxday,nowday,nowmonth,nowyear,prevday,prevmonth,prevyear,monthdiff,diffyear,len;
long long prevdate;
char tempnowday[2],tempnowmonth[2],tempnowyear[20],tempprevday[2],tempprevmonth[2],tempprevyear[20],resultday[2],resultmonth[2],resultyear[5],result[20];
//printf("nowdate %s\n",nowdate);
substring(0,4,nowdate,tempnowyear,100);
nowyear = atoi(tempnowyear);
//printf("tempnowyear %s\n",tempnowyear);
substring(4,6, nowdate, tempnowmonth, sizeof nowdate);
nowmonth = atoi(tempnowmonth);
substring(6,8,nowdate,tempnowday,sizeof nowdate);
nowday = atoi(tempnowday);
//printf("now year str %s %s %s\n",tempnowyear,tempnowmonth,tempnowday);
//printf("now year int %d %d %d\n",nowyear,nowmonth,nowday);
//printf("diff %d\n",diff);
prevday = nowday - diff;
if (prevday <= 0){
prevmonth = nowmonth - 1;
if (prevmonth <= 0){
prevyear = nowyear - 1;
prevmonth = 12 + prevmonth;
}else{
prevyear = nowyear;
}
switch (prevmonth){
case 1: maxday = 31;
break;
case 2:
if ((nowyear % 4) == 0){
maxday = 29;
}else{
maxday = 28;
}
break;
case 3: maxday = 31;
break;
case 4: maxday = 30;
break;
case 5: maxday = 31;
break;
case 6: maxday = 30;
break;
case 7: maxday = 31;
break;
case 8: maxday = 31;
break;
case 9: maxday = 30;
break;
case 10: maxday = 31;
break;
case 11: maxday = 30;
break;
case 12: maxday = 31;
break;
default: return -2;
break;
}
//printf("prevday %d\n",prevday);
prevday = maxday + prevday;
}else{
prevmonth = nowmonth;
prevyear = nowyear;
}
sprintf(tempprevday,"%d",prevday);
//printf("tempprevday %s\n",tempprevday);
len = strlen(tempprevday);
if (len < 2){
strcpy(resultday,"0");
strcat(resultday,tempprevday);
//printf("resultday1 %s\n",resultday);
}else{
strcpy(resultday,tempprevday);
//printf("resultday2 %s\n",resultday);
}
sprintf(tempprevmonth,"%d",prevmonth);
len = strlen(tempprevmonth);
if (len < 2){
strcpy(resultmonth,"0");
strcat(resultmonth,tempprevmonth);
//printf("resultmonth1 %s\n",resultmonth);
}else{
strcpy(resultmonth,tempprevmonth);
//printf("resultmonth2 %s\n",resultmonth);
}
sprintf(tempprevyear,"%d",prevyear);
len = strlen(tempprevyear);
strcpy(resultyear,tempprevyear);
//printf("resultyear %s\n",resultyear);
strcpy(result,resultyear);
strcat(result,resultmonth);
strcat(result,resultday);
//printf("result %s\n",result);
prevdate = atoll(result);
//printf("prevdate %lld\n",prevdate);
return(prevdate);
}
/*=================== Time diff Function ==============*/
/*==================== Main =====================*/
main(int argc, char *argv[])
{
char nowdate[20],prevdate[20];
int diffday,prev,i;
for (i = 1; i<argc; i++) {
if (i == 1){
strcpy(nowdate,argv[i]);
}else if (i == 2){
strcpy(prevdate,argv[i]);
}
}
/*printf("Enter now date: ");
scanf("%s",nowdate);
printf("Enter diffday: ");
scanf("%s",prevdate);
*/
diffday = atoi(prevdate);
//printf("diffday %d\n",diffday);
prev = date_diff(nowdate,diffday);
printf("%d\n",prev);
}
/*================== Main ======================*/
วิธีเรียกใช้ ./previousdate <current date> <expect previous day>
Ex: ./previousdate 20100630 1
Output: 20100629
ความคิดเห็น
เพื่อนกูเก่งจริงๆ
เพื่อนกูเก่งจริงๆ
กูก็มั่วๆ เอา
กูก็มั่วๆ เอา
ก่อนจะ ./previousdate
ก่อนจะ ./previousdate <current date> <expect previous day>
อย่าลืม chmod +x previousdate ก่อนนะ
ไม่ต้องก็ได้ #gcc -o
ไม่ต้องก็ได้
#gcc -o previousdate previousdate.c
#./previousdate <current date> <expect previous day>
ได้เลย มันเป็น c อะไม่ต้องเปลี่ยน excute mode
แต่ถ้า gcc ไม่ผ่านให้ลอง
#dos2unix previousdate.c previousdate.c
ดูก่อนครับ
ความรู้ใหม่
ความรู้ใหม่
แม่งไปรันบน HP เอ๋ออีกละ
แม่งไปรันบน HP เอ๋ออีกละ แก้ไขสำหรับ HP ครับ
strcpy(result,resultyear);
strcat(result,resultmonth);
strcat(result,resultday);
substring(0,8,result,result,9); //เพิ่มบรรทัดนี้เข้าไปครับ เพื่อทำการตัดสริงเอาแค่ 8 Digits ครับ เพราะ HP Return มาเป็น 10 digits ซะงั้น ไม่รู้มายังไง
//printf("result %s\n",result);
prevdate = atoll(result);
//printf("prevdate %lld\n",prevdate);
return(prevdate);
กระทู้ pop ใช้ได้วุ้ย 90+ ละ
กระทู้ pop ใช้ได้วุ้ย 90+ ละ แต่ไม่มีใครเจอปัญหาไรเลยเหรอ
ไ่ม่เห็นมีใครโพสถามเลย หรือว่า่ไม่มีใครเอาไปใช้หว่า