UTC는 현지 시간에서 약 25초 차이가 납니다.

UTC는 현지 시간에서 약 25초 차이가 납니다.

나는 이것을 다른 시스템에서 비교했지만 Arago Linux를 실행하는 임베디드 시스템에서만 이 동작을 얻었습니다. BusyBox v.1.13.2의 날짜 명령을 사용하고 있습니다.

나는 이 두 명령을 "동시에" 실행했습니다.

[root@host:~] date; date -u
Fri Mar 18 12:56:49 CET 2016
Fri Mar 18 11:57:14 UTC 2016

zdump의 출력은 예상대로입니다(+3600초, +1시간).

/etc/localtime  Sun Mar 29 01:00:24 2015 UT = Sun Mar 29 01:59:59 2015 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 29 01:00:25 2015 UT = Sun Mar 29 03:00:00 2015 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 25 01:00:24 2015 UT = Sun Oct 25 02:59:59 2015 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 25 01:00:25 2015 UT = Sun Oct 25 02:00:00 2015 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 27 01:00:24 2016 UT = Sun Mar 27 01:59:59 2016 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 27 01:00:25 2016 UT = Sun Mar 27 03:00:00 2016 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 30 01:00:24 2016 UT = Sun Oct 30 02:59:59 2016 CEST isdst=1 gmtoff=7200
/etc/localtime  Sun Oct 30 01:00:25 2016 UT = Sun Oct 30 02:00:00 2016 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 26 01:00:24 2017 UT = Sun Mar 26 01:59:59 2017 CET isdst=0 gmtoff=3600
/etc/localtime  Sun Mar 26 01:00:25 2017 UT = Sun Mar 26 03:00:00 2017 CEST isdst=1 gmtoff=7200

이 25초 오프셋은 어디에서 왔습니까?

답변1

25초는 2012년 7월 1일과 2015년 7월 1일 사이의 POSIX 호환 tz 영역과 "올바른" tz 영역 간의 차이입니다. tzdata가 그만큼 오래되었고 이 명령을 실행하는 셸의 기본 시간대가 POSIX CET이고 "-u" 시간대가 UTC의 "올바른" 버전인 경우 "올바른" 코드는 시스템 시계가 POSIX를 위반한다고 가정합니다. 실제로 모든 윤초를 계산하므로 "올바른" 코드는 시스템 시계를 상용시로 변환하는 과정에서 이 25초를 뺍니다.

답변2

date첫 번째 명령( ) 을 추적하면 다음과 같습니다 .

open("/etc/localtime", O_RDONLY)

다음이 가리키는 시간대 파일에 액세스합니다./etc/현지 시간이것은/usr/share/zoneinfo/유럽/취리히나는. 지금까지는 너무 좋았습니다.


두 번째 command()의 추적은 date -u작동하지 않는 이유에 대한 힌트를 제공합니다.

open("/usr/share/zoneinfo/UTC0", O_RDONLY)

zoneinfo 디렉토리에는 그러한 파일이 없었기 때문에 UTC를 UTC0에 복사해야 했고 이제 모든 것이 예상대로 작동합니다.


date; date -u
Fri Apr 26 09:52:44 CET 2016
Fri Apr 26 07:52:44 UTC 2016

답변3

04:05:12 CET와 1457838339 모듈로 86400의 차이는 시간대입니다. 27초의 오프셋을 얻는다면 이는 시간대 정의에 문제가 있다는 의미이며 결국 예상되는 (대략) 1시간 대신 27초의 오프셋을 지정하게 됩니다. TZ변수부터 시작하여 시간대 설정을 확인하세요 . Arago Linux는 Glibc를 사용합니다.시간대 지정을 위한 여러 옵션그러나 일반적으로 표준 시간대 데이터베이스의 시간대 파일이 사용됩니다(따라서 로컬 DST 규칙을 준수하고 역사적 발전을 따라야 하거나 TZ사용 하려면 설정을 해제해야 합니다 ). 당신은 그것을 사용할 수 있습니다CETEurope/ParisTZ/etc/localtimezdump -v시간대에 대한 설명을 가져옵니다.

관련 정보