문제

UNIX는 내부적으로 GMT에서 기계의 오프셋을 저장합니까? 예를 들어 : 인도 표준 시간은 GMT + 5 : 30입니다.이 5:30은 어디에 저장됩니까?

아래와 같은 스크립트로 사용하려면이 문제가 필요합니다.

if[[ off is "some value"]]
then
some statements
fi
도움이 되었습니까?

해결책

다음 프로그램은 '아시아/콜카타'로 TZ를 설정할 때 EDT와 '04 : 30 '을 인쇄하는'-04 : 00 '을 인쇄합니다.

#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;
}

원하는대로 사용/변경 한 다음 쉘 스크립트에서 호출하십시오.

다른 팁

전통적으로 유닉스에서 커널은 현재 시간을 시간대 독립적 인 형태로 유지하며, 이는 응용 프로그램에보고합니다.

애플리케이션은 환경 변수 및/또는 사용자 구성 (한 사용자의 사용자 또는 다른 세션과 다를 수 있음)을 문의하여 시간을보고 할 시간을 결정합니다.이 목적을 위해 오프셋을 보유하는 디스크에 보관 된 테이블이 있습니다. 시스템이 알고있는 모든 시간대 (이 테이블은 일광 절약 알고리즘에 대한 정치적 변화를 위해 지속적으로 업데이트되어야합니다).

커널은 GMT 시간을 내부적으로 유지하고 현지 시간을 요청하면 시간대 정보를 사용하여 오프셋을 계산합니다. 이런 식으로, 시간대 변경이 필요한 경우 내부적으로 시계는 변경이 필요하지 않습니다.

커널이나 드라이버에서는 no.

일반적으로 /etc /localtime이라는 파일에 저장됩니다. 이 파일은 종종 일광 절약 시간이 시작되고 끝나는시기, GMT의 오프셋 등을 포함하여 GMT를 현지 시간으로 변환하기위한 모든 "규칙"을 포함하는 다른 곳으로 링크됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top