// 毫到时分秒 gaishibz@gmail.com
CASTR Ms2Str(CA_LNG nMs, CA_BOOL nEnglish) {
    static const long long scDate[] = { 1000ll,31536000ll,2592000ll,86400ll,3600ll,60ll,1ll };
    static const char* scDateEnglish[] = { "Ms","Y","M","D","H","M","S" };
    static const char* scDateChs[] = { "毫","年","月","天","时","分","秒" };
    CA_PCSTR* pDate = nEnglish ? scDateEnglish : scDateChs;
    CASTR caRet; CASTR caTmp; CA_LNG lCur = nMs;
    CA_INT i = NULL, max = NULL; lldiv_t dv;
    
    if (lCur < scDate[i]) {
        caRet.l2a(lCur);
        caRet += (char*)pDate[i];
        return caRet;
    } lCur /= scDate[i]; // ms / 100

    for (i ++; i < CA_ARRAYSIZE(scDate); i++) {

        dv = lldiv(lCur, scDate[i]); lCur = dv.rem;
        if (dv.quot == NULL && max == NULL) 
            continue;

        caTmp.l2a(dv.quot);
        caTmp += (char*)pDate[i];

        caRet += caTmp;
        if (++max == 3)
            break;
    }
    return caRet;
}

// LONGLONGAGO
CC _KsaTimer::ASec2Str(Ul nTime) {
        SC CT Ul Years = 31536000Ull;
        SC CT Ul Mons = 2592000Ull;
        SC CT Ul Days = 86400Ull;
        SC CT Ul Hours = 3600Ull;
        SC CT Ul Mins = 60Ull;
        SC STR nFmt; Ul nSec;

        nFmt = ""; // Reset
        // 年 31536000
        if (nTime > 31536000Ull /*Years*/) {
            nSec = nTime / Years;
            nFmt += STS(nSec);
            nFmt += "年";
            nTime -= nSec * Years;

            nSec = nTime / Mons;
            nFmt += STS(nSec);
            nFmt += "月";
            nTime -= nSec * Mons;

            nSec = nTime / Days;
            nFmt += STS(nSec);
            nFmt += "天";
        }
        // 月 2592000
        else if (nTime > 2592000Ull /*Mons*/) {

            nSec = nTime / Mons;
            nFmt += STS(nSec);
            nFmt += "月";
            nTime -= nSec * Mons;

            nSec = nTime / Days;
            nFmt += STS(nSec);
            nFmt += "天";
            nTime -= nSec * Days;

            nSec = nTime / Hours;
            nFmt += STS(nSec);
            nFmt += "时";
        }
        // 天 86400
        else if (nTime > 86400Ull /*Days*/) {

            nSec = nTime / Days;
            nFmt += STS(nSec);
            nFmt += "天";
            nTime -= nSec * Days;

            nSec = nTime / Hours;
            nFmt += STS(nSec);
            nFmt += "时";
            nTime -= nSec * Hours;

            nSec = nTime / Mins;
            nFmt += STS(nSec);
            nFmt += "分";
        }
        // 时 3600
        else if (nTime > 3600Ull /*Hours*/) {
            nSec = nTime / Hours;
            nFmt += STS(nSec);
            nFmt += "时";
            nTime -= nSec * Hours;

            nSec = nTime / Mins;
            nFmt += STS(nSec);
            nFmt += "分";
            nTime -= nSec * Mins;

            nFmt += STS(nTime);
            nFmt += "秒";
        }
        // 分 60
        else if (nTime > 60Ull /*Mins*/) {
            nSec = nTime / Mins;
            nFmt += STS(nSec);
            nFmt += "分";
            nTime -= nSec * Mins;

            nFmt += STS(nTime);
            nFmt += "秒";
        }
        else {
            nFmt += STS(nTime);
            nFmt += u8"秒";
        }
        return nFmt.c_str();

    }
posted on 2022-07-07 19:01  Ksa-NL  阅读(42)  评论(0编辑  收藏  举报