Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74494
  • 博文数量: 29
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 337
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-24 20:02
文章分类

全部博文(29)

文章存档

2011年(1)

2009年(1)

2008年(27)

我的朋友

分类:

2008-12-07 18:57:50


#include
#include
#include

size_t input_born_time(size_t date[], size_t n);
int get_systime(size_t date[], size_t n);
int diff_time(size_t born_time[], size_t now_time[], size_t sum_time[], size_t n); // 计算从出生到现在过去的时间
static char *units[6] = {"年", "月", "日", "时", "分", "秒"};
enum unit{year, month, day, hour, minute, second};
int main(void)
{
    size_t sum_time[6], born_time[6] = {0}, now_time[6] = {0};
    size_t i, n;
 
    puts("请输入您的出生日期(您可以将你的出生日期精确到任何单位,只需要在结尾加个'#'号。 \n如:2007 12 11 2#即单位为时。):");
    
    // 获取用户的出生日期
    n = input_born_time(born_time, 6);
    system("cls");
    puts("您的出生日期为:");
    for (i = 0; i < n; ++i)  
        printf("%u%s", born_time[i], units[i]);
    
    // 获取当前系统时间
    get_systime(now_time, n);
    puts("\n\n当前时间为:");
    for (i = 0; i < n; ++i)  
        printf("%u%s", now_time[i], units[i]);
   
    // 计算时间差
    diff_time(born_time, now_time, sum_time, n);
   
    // 打印从出生到现在过去的时间
    puts("\n\n您持续存活的时间为:");
    for (i = 0; i < n; ++i)  
        printf("%u%s", sum_time[i], units[i]);
    getch();
    return 0;
}
size_t input_born_time(size_t born_time[], size_t n)
{
    size_t i;
    
    for (i = 0; i < n; ++i) {
        printf("%s:", units[i]);
        if (scanf("%u", &born_time[i]) != 1 || 0 == born_time[i])
            break;
        system("cls");
    }
    return i;
}
int get_systime(size_t now_time[], size_t n)
{
    struct tm *ntime;
    time_t now;
    time(&now); // 获取当前时间
    ntime = localtime(&now);  
    
    now_time[year] = ntime->tm_year + 1900;
    now_time[month] = ntime->tm_mon + 1;
    now_time[day] = ntime->tm_mday;
    now_time[hour] = ntime->tm_hour;
    now_time[minute] = ntime->tm_min;
    now_time[second] = ntime->tm_sec;
    return 1;
}    
int diff_time(size_t born_time[], size_t now_time[], size_t sum_time[], size_t n)
{
    static size_t carry[] = {0, [month] = 12, [hour] = 24, 60, 60};
    size_t days[][13]={{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
                             {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
    int flag, i;
    
    flag =((year % 4) == 0 && (year % 100) != 0) || ((year % 400) == 0);
    carry[day] = days[flag][now_time[month]-1];
    
    for (i = n - 1; i >= 0; --i) {
        if (now_time[i] <  born_time[i]) {
            now_time[i] += carry[i];
            now_time[i - 1] -= 1;
            }
        sum_time[i] = now_time[i] - born_time[i];
    }
    
    return 1;
}
 

阅读(445) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~