On 28-May-2002, Andry Susanto wrote:
> int main (void) {
> struct tm gmt_tm,*local_tm;
> time_t t_gmt;
>
> gmt_tm.tm_sec = 0;
> gmt_tm.tm_min = 22;
> gmt_tm.tm_hour = 4;
> gmt_tm.tm_mday = 27;
> gmt_tm.tm_mon = 5;
> gmt_tm.tm_year = 102;
>
> t_gmt = mktime(&gmt_tm);
...
> Kok ngga berubah yah? Sama dengan inputnya.
Nama variabel gmt_tm di sini misleading. Anda assume time di atas
adalah GMT, padahal time di atas belum disebutkan timezonenya. Setelah
anda panggil mktime() baru timezonenya diset (glibc cari dr
environment anda), maka time yg anda sebutkan di atas skrg sudah dlm
timezone local anda, lalu anda "convert" lagi ke local timezone, ya
jelas aja sama.
Coba kalo sebelum panggil localtime() anda panggil gmtime() dulu:
...mktime(...)
local_tm = gmtime(&t_gmt);
print_waktunya(local_tm);
local_tm = localtime(&t_gmt);
print_waktunya(local_tm);
...
nanti kan keliatan bedanya.
Saran saya:
- Rename variables anda dr gmt_tm jadi input_tm, dan dari local_tm
jadi output_tm, supaya lebih mudah dipahami.
- Coba dibaca lagi baik2 man page dr mktime(2), di situ disebutkan
kalo mktime() punya side effect mengeset extern vars utk timezone.
Ronny
--
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3