Как скопировать базу данных с использованием RDS

Как отмечено выше, в то время как time_t обычно представляет собой секунды, прошедшие с 1 января 1970 года, это нигде не указывается. Реализация, которая использует другое внутреннее представление, может отображаться в любое время, и любой код, который делает предположения о внутренней работе time_t, не будет работать там корректно.

После некоторого размышления я подошел со следующим:

time_t mkgmtime(struct tm * pt) {
    time_t ret;

    /* GMT and local time */
    struct tm * pgt, * plt;

    ret = mktime(pt);

    pgt = g_memdup(gmtime(ret), sizeof(struct tm));
    plt = g_memdup(localtime(ret), sizeof(struct tm));

    plt->tm_year -= pgt->tm_year - plt->tm_year;
    plt->tm_mon -= pgt->tm_mon - plt->tm_mon;
    plt->tm_mday -= pgt->tm_mday - plt->tm_mday;
    plt->tm_hour -= pgt->tm_hour - plt->tm_hour;
    plt->tm_min -= pgt->tm_min - plt->tm_min;
    plt->tm_sec -= pgt->tm_sec - plt->tm_sec;

    ret = mktime(plt);

    g_free(pgt);
    g_free(plt);

    return ret;
}

Возможно, это возможно оптимизировать, отбросив plt (используя pt на своем месте и опуская вызовы localtime() и g_free(plt)).

Это должно работать во всех реализациях, которые выставляют mktime(), gmtime() и localtime(), включая даты переключения DST. (mktime() будет «нормализовать» значения вне диапазона, например, начиная с января 35 до 4 февраля, а также ожидать, что 9:50 DST в середине зимы станут стандартным временем 8:50.)

Он страдает от одной потенциальной ошибки: если смещение UTC часового пояса изменяется по причинам, не отраженным в знаке DST, временные метки вокруг времени перехода могут быть истолкованы неправильно: стандартный случай - это когда законодательство изменяет свой часовой пояс (например, Литва после советских времен, после независимости, изменился с советского времени, а через несколько лет - на EET). В середине лета некоторые законодательные акты имели двойной DST, ездя через 3 разных смещения UTC в год, которые флаг DST не может представлять.

13
задан Juergen 17 April 2015 в 00:08
поделиться