2011-08-25 3 views
1

getdate.y 문법에 대한 의문

아래 코드에서 yyTimezone가 어떻게 계산되는지 이해하려고합니다.

| bare_time '+' tUNUMBER { 
    /* "7:14+0700" */ 
    yyDSTmode = DSToff; 
    yyTimezone = - ($3 % 100 + ($3/100) * 60); 
} 
| bare_time '-' tUNUMBER { 
    /* "19:14:12-0530" */ 
    yyDSTmode = DSToff; 
    yyTimezone = + ($3 % 100 + ($3/100) * 60); 
} 

어떻게 이해합니까? 타임 스탬프는 2011-01-02T10:15:20-04:00입니다. 이것은 UTC보다 0400 시간 늦었다는 것을 의미합니다. 따라서 UTC으로 변환하려면 0400 시간을 더하면 2011-01-02T14:15:20이됩니다. 내 이해가 맞습니까?

내가 위에 붙여 넣은 코드 블록에서 어떻게 이루어 집니까?

답변

3

입력이 -0400과 같은 오프셋을 인코딩합니다. 0400 부분은 tUNUMBER 토큰 (아마도 부호없는 값을 가짐)으로 반환됩니다. 이 토큰은 문법 규칙과 일치하며 $3으로 사용할 수 있습니다.

400 값에서 실제 오프셋을 분 단위로 얻으려면 먼저 두 개의 반쪽으로 분할해야합니다. 시간 부분은 $3/100 (즉, 4)으로, 분은 $3 % 100 (즉, 0)으로 얻을 수 있습니다. 한 시간에 60 분이 있기 때문에 시간에 60을 곱하고 그 시간을 분 ($3 % 100 + ($3/100) * 60)에 더하면 240이됩니다. 다음 남은 것은 기호를 추가하고 yyTimezone에 저장하는 것입니다.

결국 yyTimezone에는 분 단위의 시간대 오프셋이 포함됩니다.

+0

x % 100 및 x/100 -이 패턴에는 전구가 있어야합니다. D; 어쨌든, 귀하의 회신에 감사드립니다. – hari