Problem polega na tym, że ctime używa czasu lokalnego, więc kończy się to w przesunięciu.
Jeśli chcesz GMT, powinieneś użyć asctime(gmtime(&time)) , który poda datę/godzinę bez wpływu czasu lokalnego.
ctime jest odpowiednikiem asctime(localtime(&time))