![다른 시간대에서 "날짜" 출력 시간을 만드는 방법은 무엇입니까?](https://linux55.com/image/25537/%EB%8B%A4%EB%A5%B8%20%EC%8B%9C%EA%B0%84%EB%8C%80%EC%97%90%EC%84%9C%20%22%EB%82%A0%EC%A7%9C%22%20%EC%B6%9C%EB%A0%A5%20%EC%8B%9C%EA%B0%84%EC%9D%84%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
시간대를 으로 설정하여 실행 중인 서버가 있습니다 UTC
. 이는 일반적으로 좋은 습관인 것 같습니다(틀렸다면 정정해 주세요).
어쨌든 파일 때문에 scp
제가 연결된 서버 중 하나가 EDT
복사해야 할 형식으로 파일을 실행하고 저장하고 있습니다 /path/to/filename/data20120913
.
rsync
마지막 날에 수정된 파일을 찾기 위해 find 플래그 같은 것을 사용해 보았지만 -mtime -1
전혀 성공하지 못했습니다.
오늘의 파일 만 복사하는 것은 괜찮지만 scp
현재로서는 4시간의 창이 있고 실행은 date +%Y%m%d
각 서버에서 다른 날을 제공하므로 약간 짜증이 납니다.
살펴보면서 man date
시간을 다음과 같이 출력할 수 있다는 것을 알았지 UTC
만 이를 다른 시간대로 출력하는 방법을 찾지 못했습니다.EDT
date
나는 또한 GNU 확장과 같은 것을 사용하여 date -d 20100909 +%s
신기원 이후의 초 단위 날짜를 얻고, 수동 초 계산을 적용하고 , 그것이 어떻게 날짜로 렌더링되는지 볼 수 있다고 생각합니다 4 * 60 * 60
. 그러나 일광 절약 시간제가 시작되면 여전히 1시간이 될 것입니다.
YYYYMMDD
로 설정된 서버에서 날짜를 형식으로 출력하는 더 쉬운 방법이 있습니까 ?EDT
UTC
답변1
다음과 같이 쿼리 기간에 대한 시간대를 설정할 수 있습니다.
TZ=America/New_York date
TZ
설정과 명령 사이의 공백에 유의하십시오 date
. Bourne과 유사한 쉘에서는 rc
변수가 현재 명령에 대해서만 설정됩니다. TZ
다른 쉘( csh
, tcsh
, fish
)에서는 항상 다음을 사용할 수 있습니다 env
.
env TZ=America/New_York date
너무 길어요.
리눅스 시스템에서. 시간대는 디렉토리의 파일에 정의되어 있습니다 /usr/share/zoneinfo
. 이런 구조를 흔히들 부릅니다."올슨 데이터베이스"창립 공헌자들을 기리기 위해.
각 시간대에 대한 규칙은 텍스트 파일 행으로 정의된 다음 이진 파일로 컴파일됩니다. 이러한 방식으로 컴파일된 행은 해당 구역이 적용되는 데이터 및 시간 범위, 그리고 해당되는 경우 일광 절약 시간제 간 변환 방법을 정의하는 표기법을 정의합니다.
America/New_York
예를 들어, "America" 디렉터리에는 위에 사용된 파일에서 New York에 필요한 정보가 포함되어 있습니다.
존재하지 않는 영역(파일 이름)에 대한 사양은 자동으로 무시되고 UTC 시간이 보고됩니다. 예를 들어 다음은 잘못된 시간을 보고합니다.
TZ="America/New York" date ### WRONG ###
단일 UNIX 사양 버전 3(SUSv3 또는 POSIX-2001이라고 함)에서는 이식성을 위해 시간대 설명을 식별하는 문자열이 콜론 문자로 시작해야 한다고 명시합니다. 따라서 다음과 같이 작성할 수도 있습니다.
TZ=":America/New_York" date
TZ=":America/Los_Angeles" date
설명 파일 경로를 사용하여 시간대를 지정하는 대신 SUSv3에서는 POSIX 모델을 설명합니다. 이 형식에서 문자열은 다음과 같이 정의됩니다.
std offset [dst[offset][,start-date[/time],end-date[/time]]]
여기서 std
는 표준 구성 요소 이름이고 dst
는 일광 절약 시간 구성 요소 이름입니다. 각 이름은 3자 이상의 문자로 구성됩니다. offset
본초자오선 서쪽 시간대는 양수 값을 가지며, 자오선 동쪽 시간대는 음수 값을 갖습니다. UTC(이전 GMT)를 얻으려면 현지 시간에 오프셋을 추가하세요. 및 시간 필드는 표준/일광 변환이 발생하는 시기를 나타냅니다 start
.end
예를 들어, 미국 동부에서는 표준시가 UTC보다 5시간 빠르며 대신 EST5EDT
이를 지정할 수 있습니다 America/New_York
. 그러나 이러한 대안은 특히 미국 이외의 지역에서는 항상 인식되지 않으므로 피하는 것이 가장 좋습니다.
HP-UX(SUSv3 호환 UNIX)는 /usr/lib/tztab
EST5EDT, CST6CDT, MST7MDT, PST8PDT와 같은 텍스트 규칙과 POSIX 이름을 사용합니다. 이 파일에는 Olson 데이터베이스와 유사하게 각 시간대에 대한 모든 기록 규칙이 포함되어 있습니다.
노트:다음 디렉토리를 확인하면 모든 시간대를 찾을 수 있습니다. /usr/share/zoneinfo
.
답변2
TZ
환경 변수를 조작하여 이를 수행 할 수 있습니다 . 다음은 DST가 도착할 때 이를 처리할 수 있을 만큼 스마트한 미국/동부 지역의 현지 시간을 제공합니다.
# all on one line
TZ=":US/Eastern" date +%Y%m%d
영역 이름은 내부 파일 및 디렉터리에서 나옵니다 /usr/share/zoneinfo
.
답변3
조심하세요! 인식할 수 없는 시간대를 지정하면 Date는 현재 시간대의 시간을 출력합니다.
이것을 살펴보십시오:
-bash-4.2$ env TZ=EDT date
Wed Feb 18 19:34:41 EDT 2015
-bash-4.2$ date
Wed Feb 18 19:34:43 UTC 2015
EDT라는 시간대가 없습니다. 사실은,
-bash-4.2$ find /usr/share/zoneinfo -name "*EDT*"
반품
/usr/share/zoneinfo/EST5EDT
/usr/share/zoneinfo/posix/EST5EDT
/usr/share/zoneinfo/right/EST5EDT
이것은 작동합니다:
-bash-4.2$ TZ=EST5EDT date
Wed Feb 18 14:36:59 EST 2015
-bash-4.2$ date
Wed Feb 18 19:37:01 UTC 2015
그러나 친구가 신비한 땅 Gobbledygook에 살고 있고 해당 구역 정보가 귀하의 정보와 일치하는 경우 날짜가 Gobbledygook 구역의 시간을 출력하도록 할 수 있으며 종료 값 없이도 행복하게 그렇게 할 것입니다. 영역을 모릅니다:
-bash-4.2$ TZ=Gobbledygook date
Wed Feb 18 19:37:36 Gobbledygook 2015
-bash-4.2$ echo $?
0
답변4
이것날짜구문이 모호하고 오류가 발생하기 쉬우므로 명령줄 호출이 어려워집니다. 그래서 나는 작은 대본을 작성했습니다.세계 시간), 다른 시간대의 기본 시간대(현지 시간)로 지정된(또는 현재) 시간을 인쇄하고 그 반대의 경우도 마찬가지입니다.
여기있어. 필요에 맞게 조정하고 경로에 넣고 실행 가능하게 만드세요.
#!/bin/sh # # 다른 시간대의 기본 시간에서 지정된(또는 현재) 시간을 인쇄합니다. # 그리고 그 반대 # # 변환 기준 시간대 TZBASE=유럽/아테네 # 시간대 표시 # 더 많은 이름을 보려면 /usr/share/zoneinfo/를 참조하세요. TZONES='UTC 아메리카/Los_Angeles 아메리카/New_York 유럽/런던 유럽/파리' # 표시 형식 형식='%H:%M (%p) %Z %a %m %b %Y' 그렇다면 ["$1"]; 시간="$1" 기타 시간=`날짜+%T` 필리핀 제도 # 지정된 출력에 지정된 입력 시간대의 시간을 표시합니다. # 시간대 쇼타임() { TZIN=$1 TZOUT=$2 TZ=$TZOUT 날짜 --date='TZ="'$TZIN'"'" $time" +"$time $TZIN은 $TZOUT $FORMAT입니다." } $TZONES의 tz에 대해서는 다음을 수행하십시오. 쇼타임 $TZBASE $tz 완벽한 에코 $TZONES의 tz에 대해서는 다음을 수행하십시오. 쇼타임 $tz $TZBASE 완벽한