加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

将unix时间转换为日期

发布时间:2020-12-15 21:02:08 所属栏目:安全 来源:网络整理
导读:我正在做一个函数,将unix时间转换为日期(dd-mm-yyyy) stock UnixToTime(x){ new year = 1970; new dia = 1; new mes = 1; while(x 86400) { x -= 86400; dia ++; if(dia == getTotalDaysInMonth(mes,year)) { dia = 1; mes ++; if (mes = 12) { year ++; mes
我正在做一个函数,将unix时间转换为日期(dd-mm-yyyy)

stock UnixToTime(x)
{
    new year = 1970;
    new dia = 1;
    new mes = 1;

    while(x > 86400)
    {
        x -= 86400;
        dia ++;

        if(dia == getTotalDaysInMonth(mes,year))
        {
            dia = 1;
            mes ++;

            if (mes >= 12) 
            {
                year ++;
                mes = 1;
            }
        }
    }
    printf("%i-%i-%i",dia,mes,year);
    return x;
}

但不行.

我正在使用1458342000(今天……)测试功能,但打印> 13-3-2022,这是什么错误?

#define IsLeapYear(%1)      ((%1 % 4 == 0 && %1 % 100 != 0) || %1 % 400 == 0)

getTotalDaysInMonth就是这个;

stock getTotalDaysInMonth(_month,year)
{
    new dias[] = {
        31,// Enero
        28,// Febrero
        31,// Marzo
        30,// Abril
        31,// Mayo
        30,// Junio
        31,// Julio
        31,// Agosto
        30,// Septiembre
        31,// Octubre
        30,// Noviembre
        31  // Diciembre
    };
    return ((_month >= 1 && _month <= 12) ? (dias[_month-1] + (IsLeapYear(year) && _month == 2 ? 1 : 0)) : 0);
}

解决方法

您的算法有几个问题:

> while循环测试应该是while(x> = 86400),否则你在午夜休息一天.
>你应该只跳到新的一年当mes> 12,不是> =.
>计算天数的问题相同:如果是(dia> getTotalDaysInMonth(mes,year)),你应该勾选月份,否则你会跳过每个月的最后一天.
> getTotalDaysInMonth(mes,year)的代码似乎没问题.
> IsLeapYear的代码可以比通用格里高利规则更简单,因为1970年到2099年之间没有例外.你应该发布它以防万一有错误.

这是一个更正版本:

stock UnixToTime(x) {
    new year = 1970;
    new dia = 1;
    new mes = 1;

    while (x >= 86400) {
        x -= 86400;
        dia++;
        if (dia > getTotalDaysInMonth(mes,year)) {
            dia = 1;
            mes++;
            if (mes > 12) {
                year++;
                mes = 1;
            }
        }
    }
    printf("%i-%i-%in",year);
    return x;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读