// 毫到时分秒 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();
}