TZ, 날짜 및 hwclock을 올바르게 사용합니까?

TZ, 날짜 및 hwclock을 올바르게 사용합니까?

저는 Buildroot에서 맞춤형 보드용으로 개발한 ARM/ulibc Linux 배포판을 작업하고 있습니다. 나는 사이의 관계를 이해하려고 노력하고 있습니다

이렇게 하면 온라인에서 몇 가지 예를 본 것처럼 다음과 같습니다.

# date --set "2013-04-09 15:06:30"
Tue Apr  9 15:06:30 CDT 2013
# hwclock --systohc --utc
# hwclock
Tue Apr  9 15:06:39 2013  -0.351552 seconds

다시 시작하면 다음과 같은 결과가 나타납니다.

.... boot messages ...
... setting system clock to 2013-04-09 20:07:31 UTC (1365538051)
.... boot messages ...
#
# date; hwclock;
Tue Apr  9 15:08:24 CDT 2013
Tue Apr  9 15:08:25 2013  -0.473164 seconds
#
# date -u; hwclock -u;
Tue Apr  9 20:08:44 UTC 2013
Tue Apr  9 15:08:45 2013  -0.397120 seconds
#
# date; hwclock --localtime
Tue Apr  9 15:09:07 CDT 2013
Tue Apr  9 20:09:08 2013  -0.686601 seconds
#

그래서 hwclock은 현지 시간을 기준으로 생각하는 것 같습니다.UTC? -u실제로 적용해보면 왠지해당 가능대신 시간대? 조금 혼란스러워요. 누구든지 이 문제를 어떻게 처리해야 하는지 제안할 수 있나요?

편집하다: 단순한 ARM + Busybox + uclibc 시스템으로서 sysconfig 및 zoneinfo와 같은 일반적인 디렉터리 및 파일이 많지 않다는 점에 유의해야 합니다.

답변1

--utchwclock하드웨어 시계에 UTC를 유지하도록 지시 하고 --localtime하드웨어 시계에 시스템 시계와 동일한 시간대를 유지하도록 지시합니다. (보다 정확하게는 하드웨어 시계가 현재 시스템 시계와 동일한 UTC 오프셋에 있음을 의미합니다. 하드웨어 시계는 일반적으로 DST가 활성화되어 있는지 여부를 알 수 없습니다.) 이러한 옵션은 시스템 시계의 시간대와 무관합니다.

이론적으로 이것은 당신이 알아야 할 모든 것을 알려줍니다. 실제로 이는 혼란스러울 수 있습니다.

# date -u; hwclock -u;
Tue Apr  9 20:08:44 UTC 2013
Tue Apr  9 15:08:45 2013  -0.397120 seconds

"먼저 UTC 시스템 시간을 알려주세요. 그러면 하드웨어 시계가 UTC로 유지된다고 가정하면 현지 시간대의 시간은 어떻게 되나요?"

# date; hwclock --localtime
Tue Apr  9 15:09:07 CDT 2013
Tue Apr  9 20:09:08 2013  -0.686601 seconds

"먼저 현지 시간대의 시스템 시간을 알려주세요. 그러면 하드웨어 시계가 현지 시간을 유지한다고 가정하면 현지 시간대의 시간은 몇 시입니까?"

대부분의 시스템에서는 TZ환경 변수를 설정하여 프로세스의 시간대를 설정할 수 있습니다. 이것은 POSIX 기능입니다. BusyBox는 이를 지원하며(컴파일 시 이 기능을 끄는 옵션은 표시되지 않습니다) uClibc도 지원한다고 생각합니다. 시계 동기화를 수행할 때 짧은 시간 동안 UTC로 모든 것을 작동하는 데 도움이 됩니다.

export TZ=UTC0
date
hwclock

답변2

다음 명령을 사용하여 시간 정보를 설정했습니다.

# setup local timezone
rm /etc/localtime
# setup for EDT and EST (+4 EDT; +5 EST)
ln -s /usr/share/zoneinfo/EST5EDT /etc/localtime
# setup for only EST (+5 EST)
#ln -s /usr/share/zoneinfo/EST /etc/localtime
# setup for only Daylight Saving Time
#ln -s /usr/share/zoneinfo/EDT /etc/localtime

rm /etc/timezone
echo "US/Eastern" > /etc/timezone
export TZ="/usr/share/zoneinfo/America/New_York"

참고: date -u MMDDhhmm정전 후 컴퓨터 시간이 변동되므로 이 스크립트를 실행한 후 원자 테이블 명령을 사용하여 시스템 시계를 설정하십시오.

관련 정보