Ho bisogno di aggiungere secondi ad una data. Ad esempio, se ho una data come 2009127000000, devo aggiungere i secondi a questa data. Un altro esempio, aggiungere 50 secondi al 20091231235957.aggiungere secondi ad una data
E 'possibile in C?
Ho bisogno di aggiungere secondi ad una data. Ad esempio, se ho una data come 2009127000000, devo aggiungere i secondi a questa data. Un altro esempio, aggiungere 50 secondi al 20091231235957.aggiungere secondi ad una data
E 'possibile in C?
Il tipo di data/ora C time_t viene implementato come il numero di secondi da una certa data, quindi per aggiungere secondi ad esso è sufficiente utilizzare la normale aritmetica. Se questo non è quello che stai chiedendo, ti preghiamo di chiarire la tua domanda.
'time_t' è in genere secondi, ma non è necessariamente così. –
Utilizzo tipi e funzioni da <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>
dichiara funzioni che si occupano di time_t
e struct tm
tipi. Queste funzioni possono fare tutto ciò che vuoi.
Dovrebbe essere la risposta. Pulito, chiaro e ha esempi eccellenti. +1 – MyDaftQuestions
Aggiornato '
In POSIX un valore di time_t
è specificato in secondi, tuttavia ciò non è garantito dallo standard C, quindi potrebbe non essere vero su sistemi non POSIX. È comunemente (in effetti, non sono sicuro di quanto spesso non sia un valore che rappresenta secondi).
Ecco un esempio di aggiunta di valori di ora che non assume un time_t
rappresenta secondi utilizzando le funzionalità della libreria standard, che non sono in realtà particolarmente grande per manipolare il tempo:
#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 la stringa di tempo in un adeguato La variabile struct tm
viene lasciata come esercizio. La funzione strftime()
può essere utilizzata per formarne una nuova (e la funzione POSIX strptime()
può aiutare con l'analisi).
provare qualcosa di simile: (Nota: nessun controllo degli errori)
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));
Credo che il formato della data nel tuo esempio è underspecified. 2009127000000 potrebbe essere il 7 dicembre o il 27 gennaio. – Thomas
@benjamin, ha una lettura delle pagine man per ctime (funzioni di conversione data/ora) e strptime (converte la rappresentazione della stringa di un tempo in una struttura time tm) – Glen