2010-06-16 11 views

Odpowiedz

0

Twoja jedyna prawdziwa opcja poza moją głową to albo napisanie własnej procedury, albo skorzystanie z funkcji ctime() zdefiniowanej w POSIX.1/C90. ctime() jest z pewnością warte zainteresowania, ale jeśli twoja data nie jest już we właściwej strefie czasowej, napotkasz problemy.

EDYCJA: Nie myślałem o używaniu czasu lokalnego, o czym wspomniał Jerry poniżej. Konwersja do struct tm daje więcej możliwości, w tym to, co wymienia, i strptime().

+1

strptime powinno być strftime, prawda? –

+1

Nie, wymieniono strftime, ale strptime nie, są to dwie oddzielne (ale podobne) funkcje. Jednakże, podczas gdy strftime jest częścią C90, strptime nie jest, więc jeśli nie istnieje na platformach, na które celujesz, zignoruj ​​tę część. – jer

54

Użyj localtime, aby przekonwertować time_t na struct tm. Możesz użyć strftime, aby wydrukować żądane dane z tego.

char buff[20]; 
time_t now = time(NULL); 
strftime(buff, 20, "%Y-%m-%d %H:%M:%S", localtime(&now)); 
+3

+1 dobra odpowiedź. Ale używaj localtime_r() na wypadek, gdyby twój kod był kiedykolwiek używany w środowisku, w którym występuje ponownie. –

+1

@ Amardeep: Specjalnie poprosił o przeniesienie, a 'localtime_r' może nie kwalifikować się w tym względzie (zależy od tego, na jakich celach mu zależy). –

+2

localtime_r jest częścią POSIX od 18 lat w tym momencie. Myślę, że można bezpiecznie założyć, że będzie dostępna. –

Powiązane problemy