Newsgroup: it.comp.lang.c
Titolo: la data

volevo sapere quale funzione usare e quali casini devo fare per ottenere la
data (in una stringa o in un qualcosa di stampabile a video) nel formato per
i server web. cioč:
Sat, 21 Sep 2002 14:40:00 GMT
mi servirebbe o il codice oppure un buon link a una documentazione sulla
libreria.(credo time.h)
ps: sono su win quindi non posso usare "man"
----------------
ApO
----------------

libreria.(credo time.h)
Brian W. Kernighan, Dennis M. Ritchie
Linguaggio C, II edizione
pag 341
o il tuo libro favorito per il C e
 time_t tempo;
 struct tm *locale;
 char st[50], zone[8];
 tempo=time(NULL);
 locale=localtime(&tempo);
 e usare strftime() con il puntatore a struttura 'locale'
 (struct tm*)

 ps: sono su win quindi non posso usare "man"
Ma essendo in rete google e' disponibile :-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Sat, 21 Sep 2002 14:40:00 GMT
/* codice non testato */
#include <time.h>
#include <stdio.h>
int main(void) {
  time_t tempo;
  struct tm ora_locale;
  time(&tempo);
  ora_locale = *(localtime(&tempo));
  printf("%s\n", asctime(&ora_locale));
  return 0;
}
-- 
#include <stdio.h>/* (C) BW2K+2 This code is released under GPL 2+ */
int main(void){char c[]={98,108,97,107,119,111,108,102,64,116,105,
115,99,97,108,105,46,105,116,32,119,101,98,46,116,105,115,99,97,108,
105,46,105,116,47,98,108,97,107,119,111,108,102,0};printf("%s\n",c);}

> Sat, 21 Sep 2002 14:40:00 GMT
?
A voi vi funziona %Z ?

 A voi vi funziona %Z ?
per questo tipo di formato serve strftime, non asctime
/* codice non testato */
#include <time.h>
#include <stdio.h>
int main(void) {
  time_t tempo;
  struct tm ora_locale;
  char buffer[100];
  time(&tempo);
  ora_locale = *(localtime(&tempo));
  strftime(buffer, 100, "%a, %d %b %Y %T %Z", &ora_locale); 
  printf("%s\n", buffer);
  return 0;
}
per avere i nomi in italiano con strftime, serve un setlocale: 
aggiungere 
#include <locale.h>
e dopo le variabili
setlocale(LC_ALL, "it");


  (struct tm*)
scusami non sono molto esperto, e non mi è stata chiara la tua risposta, se
non ti disturba troppo puoi rispiegare?cmq grazie a tutti quanti per le
risposte.
---------------
ApO
---------------

setlocale(LC_ALL, "it");
in borland c non funziona;     'funziona'
   setlocale(LC_ALL, "italy");
dire che la documentazione degli help che ho è carente è dire poco;
per tali documentazioni si dovrebbe insistere su una breve e concisa e
completa descrizione delle funzioni e delle strutture con un buon
numero di esempi, la chiacchira è dannosa
(per es. non ho trovato 1 esempio funzionante con setlocale() ed è
stato un 'caso' che ho messo la parola "italy";
 "it" "De_DE"(per la Germania) ecc degli esempi NON FUNZIONANO) 
Cmq le cose sono più semplici di quello che vogliono far sembrare ...
[non mi sembra stabile ho notato che sostituendo setlocale(LC_ALL,
"italy") con setlocale(LC_TIME, "italy"); il programma crashia]
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <locale.h>
int main()
{time_t tempo;
 struct tm *local;
 char st[50], zone[10];
 double f=10000000.77777;
 setlocale(LC_ALL, "italy");
 tempo=time(NULL);
 local=localtime(&tempo);
 if(local!=NULL)
  {strftime(st,39,"%a, %d %b %Y %X ", local);
   strftime(zone, 9,"%Z", local);
   if(zone!=NULL && *zone!='\0')
           strcat(st,zone);
   else strcat(st,"GMT");
   printf("%s \n", st);
  }
 printf("%lf \n", f);
 return 0;
}
non funziona %Z che dovrebbe dare qualcosa tipo 0000 o -0007

scusami non sono molto esperto, e non mi č stata chiara la tua risposta, se
io anche non sono molto esperto, piů che altro tiro ad indovinare :)


[CUT]
grazie tante funziona quasi a dovere!!
me lo sistemo io, se non riesco rompo di nuovo!!
---------------
ApO
-------------

 numero di esempi
sogna :)
comunque
SETLOCALE(3)        Linux Programmer's Manual        SETLOCALE(3)
NAME
       setlocale - set the current locale.
SYNOPSIS
       #include <locale.h>
       char *setlocale(int category, const char * locale);
DESCRIPTION
The setlocale() function is used to set or query the program's 
current locale.
[...]
If locale is "", each part of the locale that should be modified 
is set according  to the  environment  variables.  The  details  are 
implementation dependent.  For glibc, first (regardless of category), 
the environment variable LC_ALL  is  inspected,  next the  environment  
variable  with the same name as the category (LC_COLLATE, LC_CTYPE, 
LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) and finally the   
environment variable LANG. The first existing environment variable is 
used.  If its value is not a valid locale specification, the locale is 
unchanged, and setlocale returns NULL. 
The locale "C" or "POSIX" is a portable locale; its LC_CTYPE part 
corresponds to  the 7-bit ASCII character set.
A  locale  name  is  typically of the form  
language[_territory][.codeset][@modifier], where language is an ISO 639 
language code, territory is an ISO  3166  country  code, and codeset is 
a character set or encoding identifier like ISO-8859-1 or UTF-8.
il resto lo trovi online, sulla doc gnu ;)
testato il codice: 
#include <time.h>
#include <stdio.h>
#include <locale.h>
int main(void) {
  time_t tempo;
  struct tm ora_locale;
  char buffer[100];
 
  setlocale(LC_ALL, "it");
 
  time(&tempo);
  ora_locale = *(localtime(&tempo));
  strftime(buffer, 100, "%a, %d %b %Y %T %Z", &ora_locale); 
  printf("%s\n", buffer);
  return 0;
}
$ ./a.out
mer, 25 set 2002 17:59:02 GMT+2


mer, 25 set 2002 17:59:02 GMT+2
da me lo stesso progr di sopra da
Tue, 01 Oct 2002 00
cmq lo standard  sembra ammettere il caso che non si abbia
l'informazione %Z