时间戳转化

在使用年月日时分秒转成timestamp的时候,会用到mktime

在win上我们mktime(UTC)输出的时间比中国时间小8小时

在Linux上mktime(UTC),本地Linux中国时间;输出的时间戳比实际的小2*8小时

总会有些问题;下边是参考简书的一个自己写的时间转时间戳的东西

:parse(string& str) {//is utc T,Z
    
    
    std::tm tm = {};
    //%4d-%2d-%2dT%2d:%2d:%2dZ

    int ano = stoi(str.substr(0, 4));
    int mes = stoi(str.substr(5, 2));
    int dia = stoi(str.substr(8, 2));
    int hora = stoi(str.substr(11, 2));
    int minuto = stoi(str.substr(14, 2));
    int segundo = stoi(str.substr(17, 2));
    
  // Passo 1.
    long anosDesde1970 = ano - 1970;

    // Passo 2.
    long periodosDe400Anos = anosDesde1970 / 400;
    int anoNoPeriodoDe400Anos = anosDesde1970 % 400;

    // Passo 3.
    int periodosDe4AnosNos400 = anoNoPeriodoDe400Anos / 4;
    int anoNoPeriodoDe4Anos = anoNoPeriodoDe400Anos % 4;

    // Passo 4.
    int diasNosAnosAnterioresDoPeriodoDe4Anos = 365 * anoNoPeriodoDe4Anos + (anoNoPeriodoDe4Anos == 3 ? 1 : 0);
    // long segundosPorAno = segundosPorDia * diasNosAnosAnterioresDoPeriodoDe4Anos;
    // Passo 5.
    long diasNoAno = dia - 1;
    int tabelaDeMeses[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    for (int i = 0; i < mes - 1; i++) {
        diasNoAno += tabelaDeMeses[i];
    }

    // Passo 6.
    long dias =
        diasNoAno + diasNosAnosAnterioresDoPeriodoDe4Anos + periodosDe4AnosNos400 * 1461 + periodosDe400Anos * 146097;

    // Passo 7.
    if (anoNoPeriodoDe4Anos == 2 && mes > 2)
        dias++;
    if (anoNoPeriodoDe400Anos > 130 || (anoNoPeriodoDe400Anos == 130 && mes > 2))
        dias--;
    if (anoNoPeriodoDe400Anos > 230 || (anoNoPeriodoDe400Anos == 230 && mes > 2))
        dias--;
    if (anoNoPeriodoDe400Anos > 330 || (anoNoPeriodoDe400Anos == 330 && mes > 2))
        dias--;

    // Passo 8.
    //return segundo + 60 * minuto + 60 * 60 * hora + 60 * 60 * 24 * dias;
    long timeStamp = segundo + 60 * minuto + 60 * 60 * hora + 60 * 60 * 24 * dias;
    //if (m_time_houe_off > 0)
   // {
   //     timeStamp += 3600 * m_time_houe_off;
   // }
    //return 60;
    return timeStamp;

}

 

posted on 2024-12-06 17:06  邗影  阅读(6)  评论(0编辑  收藏  举报

导航