Je dois ajouter des secondes à une date. Par exemple, si j'ai une date comme 2009127000000, je dois ajouter les secondes à cette date. Un autre exemple, ajouter 50 secondes à 20091231235957.ajouter des secondes à une date
Est-ce possible en C?
Je dois ajouter des secondes à une date. Par exemple, si j'ai une date comme 2009127000000, je dois ajouter les secondes à cette date. Un autre exemple, ajouter 50 secondes à 20091231235957.ajouter des secondes à une date
Est-ce possible en C?
Le type date/heure C time_t est implémenté comme le nombre de secondes écoulées depuis une certaine date, donc pour ajouter des secondes, vous utilisez simplement l'arithmétique normale. Si ce n'est pas ce que vous demandez, veuillez clarifier votre question.
'time_t' est généralement secondes, mais ce n'est pas nécessairement le cas. –
Utilisez les types et les fonctions de <time.h>
.
time_t now = time(0);
time_t now_plus_50_seconds = now + 50;
time_t now_plus_2_hours = now + 7200;
<time.h>
déclare fonctions qui traitent de time_t
et struct tm
types. Ces fonctions peuvent faire tout ce que vous voulez.
Devrait être la réponse. Propre, clair, et a d'excellents exemples. +1 – MyDaftQuestions
Mis à jour '
Dans POSIX, la valeur time_t
est définie sur secondes, mais ce n'est pas garanti par le standard C, donc cela peut ne pas être vrai sur les systèmes non-POSIX. Il est généralement (en fait, je ne suis pas sûr combien de fois ce n'est pas une valeur représentant des secondes).
Voici un exemple d'ajouter des valeurs de temps qui ne suppose pas time_t
représente quelques secondes en utilisant les installations de la bibliothèque standard, qui ne sont vraiment pas particulièrement grand pour la manipulation du temps:
#include <time.h>
#include <stdio.h>
int main()
{
time_t now = time(NULL);
struct tm now_tm = *localtime(&now);
struct tm then_tm = now_tm;
then_tm.tm_sec += 50; // add 50 seconds to the time
mktime(&then_tm); // normalize it
printf("%s\n", asctime(&now_tm));
printf("%s\n", asctime(&then_tm));
return 0;
}
Parsing votre chaîne de temps dans un montage approprié struct tm
variable est laissé comme un exercice. La fonction strftime()
peut être utilisée pour formater un nouveau (et la fonction POSIX strptime()
peut aider avec l'analyse).
Essayez quelque chose comme ceci: (Note: pas de contrôle d'erreur)
include <time.h>
char* string = ...;
char buf[80];
struct tm;
strptime(string, "%Y%m...", &tm);
tm->tm_isdst = 0;
strftime(buf, sizeof(buf), "%Y%m...", localtime(mktime(&tm) + 50));
Je pense que le format de la date dans votre exemple est underspecified. 2009127000000 pourrait être le 7 décembre ou le 27 janvier. – Thomas
@benjamin, lisez les pages man de ctime (fonctions de conversion date/heure) et strptime (convertit la représentation sous forme de chaîne d'une structure time to time tm) – Glen