मेरा मानना है कि निम्नलिखित लिनक्स में सच में कम से कम है: समयक्षेत्र जानकारी/usr/share/zoneinfo/से आता है। लोकलटाइम/etc/localtime पढ़ता है जो जोनिनोफ़ो से उपयुक्त फ़ाइल की एक प्रति होना चाहिए। आप समय क्षेत्र फ़ाइल पर zdump -v
करके क्या अंदर देख सकते हैं (zdump sbin में हो सकता है, लेकिन आप ऊंचा अनुमतियाँ की जरूरत नहीं है इसके साथ समय क्षेत्र फ़ाइलों को पढ़ने के लिए)। यहां एक स्निप किया गया है:
/usr/share/zoneinfo/EST5EDT Sun Nov 6 05:59:59 2033 UTC = Sun Nov 6 01:59:59 2033 EDT isdst=1 gmtoff=-14400
/usr/share/zoneinfo/EST5EDT Sun Nov 6 06:00:00 2033 UTC = Sun Nov 6 01:00:00 2033 EST isdst=0 gmtoff=-18000
/usr/share/zoneinfo/EST5EDT Sun Mar 12 06:59:59 2034 UTC = Sun Mar 12 01:59:59 2034 EST isdst=0 gmtoff=-18000
/usr/share/zoneinfo/EST5EDT Sun Mar 12 07:00:00 2034 UTC = Sun Mar 12 03:00:00 2034 EDT isdst=1 gmtoff=-14400
/usr/share/zoneinfo/EST5EDT Sun Nov 5 05:59:59 2034 UTC = Sun Nov 5 01:59:59 2034 EDT
मुझे लगता है कि यदि आप चाहें तो आप इसे स्वयं पार्स कर सकते हैं। मुझे यकीन नहीं है कि एक stdlib फ़ंक्शन है जो केवल gmtoff लौटाता है (वहां अच्छा हो सकता है लेकिन मुझे नहीं पता ...)
संपादित करें: मैन tzfile zininfo फ़ाइल के प्रारूप का वर्णन करता है। आप उचित प्रकार की संरचना में बस एमएमएपी करने में सक्षम होना चाहिए। ऐसा लगता है कि zdump इसके एक कंगन के आधार पर क्या कर रहा है।
#define _GNU_SOURCE /* for tm_gmtoff and tm_zone */
#include <stdio.h>
#include <time.h>
/* Checking errors returned by system calls was omitted for the sake of readability. */
int main(void)
{
time_t t = time(NULL);
struct tm lt = {0};
localtime_r(&t, <);
printf("Offset to GMT is %lds.\n", lt.tm_gmtoff);
printf("The time zone is '%s'.\n", lt.tm_zone);
return 0;
}
नोट::
"' tm' एक 'gmtoff' क्षेत्र है" -> कि एक गैर मानक सी पुस्तकालय विस्तार है। – chux