偏离GMT标准时间

时间:2009-12-09 03:36:15

标签: unix shell gmt

Unix是否在内部存储GMT机器的偏移量? 例如:印度标准时间是格林尼治标准时间+5:30。这是5:30存储在哪里?

我需要这个在下面的脚本中使用它

if[[ off is "some value"]]
then
some statements
fi

4 个答案:

答案 0 :(得分:1)

传统上,在UNIX中,内核将当前时间保持为与时区无关的形式,这是它向应用程序报告的内容。

应用程序参考环境变量和/或用户配置(对于不同的用户可以是不同的,或者对于一个用户可以是不同的会话),以确定报告时间的时区。为此,磁盘上保留有表格系统知道的所有时区的偏移量(这些表需要不断更新,以便对夏令时算法进行政治​​更改)。

答案 1 :(得分:0)

内核在内部保留GMT时间,当被要求本地时间时,使用时区信息计算偏移量。这样,如果需要在内部更改时区,则不需要更改时钟。

答案 2 :(得分:0)

在内核或驱动程序中,没有。

通常,它存储在名为/ etc / localtime的文件中。该文件通常是指向其他地方的文件的链接,该文件包含(以压缩形式)用于将GMT转换为本地时间的所有“规则”,包括夏令时开始和结束时,与GMT的偏移等等。

答案 3 :(得分:0)

以下程序在EDT中为我打印'-04:00',在我将TZ设置为'Asia / Kolkata'时打印'04:30':

#include <stdio.h>
#include <time.h>

int
main ()
{
    int hours;
    int minutes;
    int negative_sign = 1;

    tzset ();
    // printf ("tzname: %s tzname[1]: %s\n", tzname [0], tzname [1]);
    // printf ("DST: %d\n", daylight); /* 0 when no DST */
    // printf ("timezone: %ld\n", timezone);
    /* 'timezone' is the number of seconds west of GMT */
    /* It is negative for tzs east of GMT */
    if (timezone <= 0) {
        timezone = -timezone;
        negative_sign = 0;
    }

    if (daylight) {
        timezone -= 3600; /* substract 1h when DST is active */
        if (timezone <= 0) {
            timezone = -timezone;
            negative_sign = 0;
        }
    }
    timezone /= 60; /* convert to minutes */
    hours = timezone / 60;
    minutes = timezone % 60;
    printf ("%s%02d:%02d\n", (negative_sign ? "-" : ""), hours, minutes);
    return 0;
}

随意使用/更改您想要的任何内容,然后从您的shell脚本中调用它。