PDA

View Full Version : [C] le date??


TorpedoBlu
15-02-2004, 10:12
come si gestiscono le date in C?? sto iniziando a smanettare con C, e voglio fare una specie di agenda che mi gestisce gli appelli universitari, ma come faccio a gestire le date??? grazie

cionci
15-02-2004, 10:35
Questo è un programma di esempio...le funzioni con _ davanti le puoi scrivere anche senza...

/* TIMES.C illustrates various time and date functions including:
* time _ftime ctime asctime
* localtime gmtime mktime _tzset
* _strtime _strdate strftime
*
* Also the global variable:
* _tzname
*/

#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <string.h>

void main()
{
char tmpbuf[128], ampm[] = "AM";
time_t ltime;
struct _timeb tstruct;
struct tm *today, *gmt, xmas = { 0, 0, 12, 25, 11, 93 };

/* Set time zone from TZ environment variable. If TZ is not set,
* the operating system is queried to obtain the default value
* for the variable.
*/
_tzset();

/* Display operating system-style date and time. */
_strtime( tmpbuf );
printf( "OS time:\t\t\t\t%s\n", tmpbuf );
_strdate( tmpbuf );
printf( "OS date:\t\t\t\t%s\n", tmpbuf );

/* Get UNIX-style time and display as number and string. */
time( &ltime );
printf( "Time in seconds since UTC 1/1/70:\t%ld\n", ltime );
printf( "UNIX time and date:\t\t\t%s", ctime( &ltime ) );

/* Display UTC. */
gmt = gmtime( &ltime );
printf( "Coordinated universal time:\t\t%s", asctime( gmt ) );

/* Convert to time structure and adjust for PM if necessary. */
today = localtime( &ltime );
if( today->tm_hour > 12 )
{
strcpy( ampm, "PM" );
today->tm_hour -= 12;
}
if( today->tm_hour == 0 ) /* Adjust if midnight hour. */
today->tm_hour = 12;

/* Note how pointer addition is used to skip the first 11
* characters and printf is used to trim off terminating
* characters.
*/
printf( "12-hour time:\t\t\t\t%.8s %s\n",
asctime( today ) + 11, ampm );

/* Print additional time information. */
_ftime( &tstruct );
printf( "Plus milliseconds:\t\t\t%u\n", tstruct.millitm );
printf( "Zone difference in seconds from UTC:\t%u\n",
tstruct.timezone );
printf( "Time zone name:\t\t\t\t%s\n", _tzname[0] );
printf( "Daylight savings:\t\t\t%s\n",
tstruct.dstflag ? "YES" : "NO" );

/* Make time for noon on Christmas, 1993. */
if( mktime( &xmas ) != (time_t)-1 )
printf( "Christmas\t\t\t\t%s\n", asctime( &xmas ) );

/* Use time structure to build a customized time string. */
today = localtime( &ltime );

/* Use strftime to build a customized time string. */
strftime( tmpbuf, 128,
"Today is %A, day %d of %B in the year %Y.\n", today );
printf( tmpbuf );
}

TorpedoBlu
15-02-2004, 10:41
con tutta laa buona volontà...non ci capisco molto...:wtf:

TorpedoBlu
15-02-2004, 10:45
e poi mi da: errore alla riga 20

C:\Documents and Settings\Administrator\Desktop\SenzaTitolo1.cpp
aggregate `struct _timeb tstruct' has incomplete type and cannot be initialized

cionci
15-02-2004, 10:51
Togli gli underscore...

TorpedoBlu
15-02-2004, 10:53
fatto, ma mi da sempre quell'errore, cmq mi spieghi un pochino il codice? non capisco priprio

VegetaSSJ5
15-02-2004, 22:23
Originariamente inviato da TorpedoBlu
fatto, ma mi da sempre quell'errore, cmq mi spieghi un pochino il codice? non capisco priprio
hai detto che ti serve il programma in C mentre hai chiamato il tuo file con estensione .cpp (ovvero C++). Alcuni compilatori riconoscono il linguaggio da compilare in base alla estensione del file: devi rinominarlo in .c
che compilatore usi??

TorpedoBlu
16-02-2004, 06:38
devc++

cionci
16-02-2004, 08:59
A me su Dev-C++ funziona benissimo senza alcuna modifica (a parte int main):

/* TIMES.C illustrates various time and date functions including:
* time _ftime ctime asctime
* localtime gmtime mktime _tzset
* _strtime _strdate strftime
*
* Also the global variable:
* _tzname
*/

#include <time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/timeb.h>
#include <string.h>

int main()
{
char tmpbuf[128], ampm[] = "AM";
time_t ltime;
struct _timeb tstruct;
struct tm *today, *gmt, xmas = { 0, 0, 12, 25, 11, 93 };

/* Set time zone from TZ environment variable. If TZ is not set,
* the operating system is queried to obtain the default value
* for the variable.
*/
_tzset();

/* Display operating system-style date and time. */
_strtime( tmpbuf );
printf( "OS time:\t\t\t\t%s\n", tmpbuf );
_strdate( tmpbuf );
printf( "OS date:\t\t\t\t%s\n", tmpbuf );

/* Get UNIX-style time and display as number and string. */
time( &ltime );
printf( "Time in seconds since UTC 1/1/70:\t%ld\n", ltime );
printf( "UNIX time and date:\t\t\t%s", ctime( &ltime ) );

/* Display UTC. */
gmt = gmtime( &ltime );
printf( "Coordinated universal time:\t\t%s", asctime( gmt ) );

/* Convert to time structure and adjust for PM if necessary. */
today = localtime( &ltime );
if( today->tm_hour > 12 )
{
strcpy( ampm, "PM" );
today->tm_hour -= 12;
}
if( today->tm_hour == 0 ) /* Adjust if midnight hour. */
today->tm_hour = 12;

/* Note how pointer addition is used to skip the first 11
* characters and printf is used to trim off terminating
* characters.
*/
printf( "12-hour time:\t\t\t\t%.8s %s\n",
asctime( today ) + 11, ampm );

/* Print additional time information. */
_ftime( &tstruct );
printf( "Plus milliseconds:\t\t\t%u\n", tstruct.millitm );
printf( "Zone difference in seconds from UTC:\t%u\n",
tstruct.timezone );
printf( "Time zone name:\t\t\t\t%s\n", _tzname[0] );
printf( "Daylight savings:\t\t\t%s\n",
tstruct.dstflag ? "YES" : "NO" );

/* Make time for noon on Christmas, 1993. */
if( mktime( &xmas ) != (time_t)-1 )
printf( "Christmas\t\t\t\t%s\n", asctime( &xmas ) );

/* Use time structure to build a customized time string. */
today = localtime( &ltime );

/* Use strftime to build a customized time string. */
strftime( tmpbuf, 128,
"Today is %A, day %d of %B in the year %Y.\n", today );
printf( tmpbuf );
system("pause");
}

Riguardo a cosa fa...è commentato molto bene... Puoi cercare ogni funzione in rete per vederne l'uso specifico...

TorpedoBlu
16-02-2004, 09:01
puoi spiegarmi un po' il codice? (sono alle prime armi)

cionci
16-02-2004, 09:07
Come ti ho detto, non è che si possa spiegare molto... E' l'uso pari pari delle funzioni (come anche scritto nei commenti)...

Qui trovi l'help: http://msdn.microsoft.com/library/en-us/vccore98/HTML/_crt_time_management.asp?frame=true

VegetaSSJ5
16-02-2004, 11:41
Originariamente inviato da cionci
A me su Dev-C++ funziona benissimo senza alcuna modifica (a parte int main):
anche a me è perfetto con dev-c++! :)